5

我正在尝试为IBAction应用程序各个部分所需的通用功能提供一种方法。

即登录是模态实现的,如果成功,则会发出一个通知,允许所有加载的视图控制器对此事件作出反应(从匿名转换到认证)

@interface MyAppDelegate : NSObject <UIApplicationDelegate>
{
  ...
}
- (IBAction)loginTapped:(id)sender;
@end

我将该按钮的操作设置为 IB 中的 First Responder,但是响应者链没有给出MyAppDelegate响应的机会。

我的问题是,我不想在响应者链的各个部分复制该方法,我想将它添加到已经是子类的公共类中。

UIResponder链条一直到最后,但这UIApplication似乎是终点。我UIApplicationDelegate的不能参加。

我想将我的应用程序委托插入或添加到响应者链中!

(或找到另一种方法将UIButtontouch-up-inside 连接到应用程序范围的实现。我想避免子类化UITabBarControllerorUIWindow如果可能的话)

4

2 回答 2

2

如果它是子类,您可以子类化UIApplication以返回应用程序委托。然后,您需要更改您的调用以使用您的自定义子类。-nextResponderUIResponderUIApplicationMain

我自己没有尝试过,但我想不出这会导致任何直接的问题。

于 2010-07-28T20:34:38.577 回答
1

从 iOS 5 开始,AppDelegate 自动成为响应者链中的最后一个链接。Xcode 项目模板将创建一个 AppDelegate,它是一个子类,UIResponder而不是NSObject. 但是,为避免混淆 AppDelegate,请覆盖 AppDelegatenextResponder并将工作卸载到自定义UIResponder对象中:

- (UIResponder *)nextResponder
{
    static dispatch_once_t onceToken;
    static LastUIResponder *lastResponder = nil;
    dispatch_once(&onceToken, ^{
        lastResponder = [[LastUIResponder alloc] init];
    });
    return lastResponder;
}
于 2014-02-02T16:06:08.000 回答