0

こんにちはスタックオーバーフラワー

デザートの質問があります。

MainMenuViewController クラスがあります。アプリの右側にメニューを表示するメソッドがあります。このメソッドは、アプリのさまざまな部分から呼び出されます。実際には、すべてのナビゲーション コントローラーで、そのメソッドをナビゲーション バーの右ボタンのターゲットとして設定する必要があります。

これにより、プッシュされたすべてのView Controllerに次のようなコードが表示されます。

UIViewController *root = [self.navigationController.viewControllers objectAtIndex:0];
[self.topBarMenuButton addTarget:((RecordsViewController*)root).mainMenuController action:@selector(launchMenu:) forControlEvents: UIControlEventTouchUpInside];

また、すべてのルート コントローラーにメイン メニューへの参照を与える必要があります。

私はまったく好きではありません。私がしたいのは次のようなものです:

[self.topBarMenuButton addTarget:[MainMenuController sharedInstance] action:@selector(launchMenu:) forControlEvents: UIControlEventTouchUpInside];

したがって、アプリのすべてのビュー コントローラーは、ルート ビュー コントローラーまたはアプリ デリゲートからメイン メニューを取得しなくても、メイン メニューにアクセスできます。

これは良い考えですか?私には問題ないように思えますが、共有View Controllerインスタンスの使用に不利な点があるかどうかはわかりません。

ありがとう、幸せなコーディング

4

1 に答える 1

0

要件にはシングルトンを使用することをお勧めします。

MainMenuViewController.m ファイル内

static MainMenuViewController *_sharedMySingleton;

+(MainMenuViewController *) sharedInstance
{
    @synchronized([MainMenuViewController class])
    {
        if (!_sharedMySingleton)
        {
            _sharedMySingleton = [[self alloc] init];

        }
        return _sharedMySingleton;
    }
    return nil;
}

このオブジェクトにアクセスしたい場所はどこでも、次のように呼び出すだけです...

[self.topBarMenuButton addTarget:[MainMenuController sharedInstance] action:@selector(launchMenu:) forControlEvents: UIControlEventTouchUpInside];
于 2013-03-06T12:30:55.700 に答える