5

IBActionアプリのさまざまな部分で必要な共通機能のメソッドを提供しようとしています。

つまり、ログインはモーダルに実装され、成功すると、読み込まれたすべてのビュー コントローラーがこのイベントに反応できるようにする通知が送信されます (匿名から認証済みへの移行)。

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

MyAppDelegateそのボタンのアクションを IB の First Responder に設定しましたが、レスポンダー チェーンは応答する機会を与えません。

私の問題は、レスポンダーチェーンのさまざまな部分でメソッドを複製したくないということです。すでにサブクラスである共通クラスに追加したいと考えています。

UIResponderチェーンは までずっと続いていますがUIApplication、それで終わりのようです。私UIApplicationDelegateは参加できません。

アプリ デリゲートをレスポンダー チェーンに挿入または追加したい!

(または、タッチアップ内部をアプリ全体の実装に接続する別の方法を見つけます。可能であれば、またはUIButtonのサブクラス化を避けたい)UITabBarControllerUIWindow

4

2 に答える 2

2

UIApplicationサブクラスの場合、アプリケーション デリゲートを-nextResponder返すようにサブクラス化できUIResponderます。UIApplicationMain次に、カスタム サブクラスを使用するように呼び出しを変更する必要があります。

私はこれを自分で試したことはありませんが、これが引き起こす差し迫った問題は考えられません。

于 2010-07-28T20:34:38.577 に答える
1

iOS 5 以降、AppDelegate は自動的にレスポンダー チェーンの最後のリンクになります。UIResponderXcode プロジェクト テンプレートは、ではなくのサブクラスである AppDelegate を作成しますNSObject。ただし、AppDelegate が乱雑になるのを避けるために、AppDelegate をオーバーライドしてnextResponder作業をカスタム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 に答える