关闭操作表时 ShareKit 失去焦点

Posted

技术标签:

【中文标题】关闭操作表时 ShareKit 失去焦点【英文标题】:ShareKit lose focus when actionsheet is closed 【发布时间】:2012-04-16 12:15:14 【问题描述】:

我正在尝试将 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

【问题讨论】:

你有没有想过这个问题?我遇到了同样的问题:从 UIActionSheet 弹出框关闭可以正常工作,但完成一个动作(通过取消或成功完成)不会做任何事情。 【参考方案1】:

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

还有,[自我释放];在 dealloc 中完全误解了 release 的作用,如果你在 dealloc 中,那么释放 self 不会做任何事情! 学习内存管理规则。

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

【讨论】:

嗨,我听从了你的建议,现在代码属于一个类别。操作表现在可以正常关闭,并且使用操作表委托重新获得焦点。现在问题仅在完成操作(推文/邮件发送或取消等)时仍然存在完成/取消”事件?

以上是关于关闭操作表时 ShareKit 失去焦点的主要内容,如果未能解决你的问题,请参考以下文章

关闭字体对话框时窗口失去焦点

在本机反应中单击 TextInput 字段外部时失去焦点并关闭键盘?

失去焦点时自动关闭 ExtJS 窗口

失去焦点后无法取消对话框?

关于窗口失去焦点的问题,出高分求高手帮忙解决!

窗口/舞台失去焦点时的事件