2013-02-11 5 views
1

У меня есть два контроллера вида - a UIViewController и UITableViewController.iOS - код обмена между контроллерами вида

И оба они требуют одинаковый код для barButtonItems - кнопка «Готово» и кнопка настроек. Я думаю, что уродливо иметь тот же код для селекторов методов и в 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? Спасибо :)

ответ

0

Если вы действительно хотите, вы можете создать статический метод initNavigationBar, где вы переходите в navigationItem.

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

     navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 

} 

Но подумайте дважды, если это имеет смысл.

+0

спасибо! никогда не пытался использовать 'target: self' в статическом методе раньше, я попробую. – s12chung

+0

o, а не я, причина в том, что вы передаете себя, или self.navigationItem к этому методу в качестве аргумента. – AlexWien

Смежные вопросы