1

UIViewControlleraと aの 2 つのビュー コントローラーがありUITableViewControllerます。

そして、どちらもbarButtonItems完了ボタンと設定ボタンに同じコードを必要とします。メソッド セレクターと で同じコードを使用するのは見苦しいと思いますが、2 つのコントローラーで同じコードをviewDidLoad使用する他の方法は考えられません。barButtonItems

共有コードは次のようになります。

- (void)dismissViewController { [self.navigationController dismissViewControllerAnimated:YES completion:nil]; }
- (void)done:(UIBarButtonItem *)sender { [self dismissViewController]; }
- (void)settings:(UIBarButtonItem *)sender { [self performSegueWithIdentifier:SETTINGS_SEGUE sender:sender]; }

- (void)viewDidLoad {
   [super viewDidLoad];

   if (self.navigationController.viewControllers.count == 1)
     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:UIBarButtonItemStyleBordered target:self action:@selector(settings:)];
   self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
}

アーキテクチャ的に、私のコードは次のようになります。

UITabBarController -view controllers->
    UINavigationController -root view controller-> UIViewController
    UINavigationController -root view controller-> UITableViewController

との間でコードを共有する方法はUIViewControllerありUITableViewControllerますか? ありがとう :)

4

1 に答える 1

0

本当に必要な場合は、を渡す静的メソッドinitNavigationBarnavigationItemを作成できます。

+ (void ) initNavigationBar: (UiNavigationItem *) navigationItem 
{
      navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
         initWithTitle:@"Settings" style:UIBarButtonItemStyleBordered 
         target:selfaction:@selector(settings:)];

      navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 

}

しかし、それが理にかなっている場合は、よく考えてください。

于 2013-02-11T21:57:11.723 に答える