我正在尝试将ShareKit集成到我的ios游戏中。

一切工作正常,并且显示了动作表,并且可以与它进行交互,但是当sharekit动作完成时(关闭动作表或完成任何动作),我无法将焦点返回到我的应用程序。

我已经尝试了几种方法,但是任何方法都对我有用。发生了什么?
我不是专业程序员,所以我希望我缺少一些东西。

我是

这是我的.h

#import <UIKit/UIKit.h>
#import "SHK.h"
#import "SHKConfiguration.h"

@interface SocialWrapper: UIViewController{
}

- (id) init;
- (void) open;
- (void) dealloc;

@end


和.m

#import "SocializeWrapper.h"

@implementation SocialWrapper

- (id) init {
    self=[super init];

    DefaultSHKConfigurator *configurator = [[DefaultSHKConfigurator alloc] init];
    [SHKConfiguration sharedInstanceWithConfigurator:configurator];

    [SHK flushOfflineQueue];
    return self;
}

- (void) open
{
    NSString *someText = @"Hello Earth!";
    SHKItem *item = [SHKItem text:someText];

    // Get the ShareKit action sheet
    SHKActionSheet *actionSheet = [SHKActionSheet actionSheetForItem:item];

    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    [window addSubview:self.view];

    [SHK setRootViewController:self];
    [actionSheet showInView:self.view];
}

- (void) dealloc {
     NSLog(@"SHK dealloc");
    [self release];
    [super dealloc];
}

@end


我通过使用这个包装器来称呼它

#import "SocializeWrapper.h"

SocialWrapper *socialize;

void SHKinit(void) {
    NSLog(@"SHK Init");
    socialize = [[SocialWrapper alloc] init];
}


void SHKopenWeb(void){
    NSLog(@"SHK Open actionsheet");
    [socialize open];
}


我正在使用ios 5,xcode 4.3.2和git的最新sharekit版本。

我认为一旦关闭操作表,就必须解雇我的SocialWrapper,但我不知道如何捕获该事件,即使这是正确的。我被困住了。

任何帮助将不胜感激。

更新

正如评论所建议的那样,现在控制器位于一个类别中,使用操作表委托,可以在单击“取消”操作表按钮时重新获得焦点。完成或取消操作后,问题仍然存在。不知道如何捕获该事件。

这是我的类别代码:

#import "SocialWrapper.h"

@implementation UIViewController (SocialController)


-(void) loadconfig
{
    DefaultSHKConfigurator *configurator = [[DefaultSHKConfigurator alloc] init];
    [SHKConfiguration sharedInstanceWithConfigurator:configurator];

    [SHK flushOfflineQueue];
}

- (void) open
{
    NSLog(@"Opening social button");

    NSString *someText = @"Monkey Armada rules!";
    SHKItem *item = [SHKItem text:someText];

    // Get the ShareKit action sheet
    SHKActionSheet *actionSheet = [SHKActionSheet actionSheetForItem:item];

    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    [window addSubview:self.view];

    [actionSheet setDelegate:self];

    [SHK setRootViewController:self];
    [actionSheet showInView:self.view];
}

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
      NSLog(@"SHK actionsheet dissmiss with button %d", buttonIndex);
     if(buttonIndex == 4)
     {
        NSLog(@"SHK close actionsheet");
        [self dismissViewControllerAnimated:YES completion:nil];
        [self.view removeFromSuperview];
     }
}
@end

最佳答案

好吧,因为SHKActionSheet是UIActionSheet的子类,所以您可以将该类的委托设置为self,以了解何时发生解雇。

另外,[自我发布];在dealloc中完全误解了发行版的功能,如果您在dealloc中,那么释放self不会做任何事情!
了解内存管理规则。

我还应该警告您,[window addSubview:self.view]已过时,您根本不应该这样做。实际上,我认为没有理由包装共享工具包,每个视图控制器都应该能够轻松编写该代码。更糟糕的是,如果您不想每次都重写代码,则可以将该代码放在UIViewController的类别中。

关于ios - 关闭工作表时,ShareKit失去焦点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10173871/

10-10 18:34