У меня есть два контроллера вида - 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
? Спасибо :)
спасибо! никогда не пытался использовать 'target: self' в статическом методе раньше, я попробую. – s12chung
o, а не я, причина в том, что вы передаете себя, или self.navigationItem к этому методу в качестве аргумента. – AlexWien