Если вы хотите, чтобы несколько представлений имели один и тот же rightBarButtonItem, почему бы не создать базовый UIViewController, который наследуют все ваши представления?Концептуально, я думаю, что это лучшее решение, потому что не только все представления унаследуют кнопку, они также получат поведение;) Это также позволяет вам переопределять методы в вашем базовом контроллере только в том случае, если нужно одно представлениеобрабатывать щелчок немного по-другому.
@interface BaseViewController : UIViewController
@property (nonatomic, retain) YourApplicationDelegate *delegate;
- (void) setupButtons;
- (void) buttonClicked:(id)sender;
@end
#import "BaseViewController.h"
@implementation BaseViewController
@synthesize delegate=_delegate;
- (void) viewDidLoad {
[super viewDidLoad];
self.delegate = (YourApplicationDelegate *) [[UIApplication sharedApplication] delegate];
[self setupButtons];
}
- (void) setupButtons {
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave
target:self
action:@selector(buttonClicked:)];
self.navigationItem.rightBarButtonItem = button;
[button release];
}
- (void) buttonClicked:(id)sender {
NSLog(@"Click!");
}
- (void) dealloc {
[_delegate release];
[super dealloc];
}
@end
/* Now the rest of your view controllers look pretty clean and you don't have a lot of
code in your delegate method. Most problems can be solved with a layer or two of abstraction :) */
@interface MyViewController : BaseViewController
@end
Базовые ViewControllers также являются хорошим местом для внедрения вашего делегата приложения, который вам понадобится много.Вот почему я включил его в блок кода, хотя это не было частью вашего вопроса.Если вы хотите использовать общий экземпляр кнопки или делегировать обработчик ответа, вы можете легко поместить этот код в свой делегат и использовать базовое представление для легкого доступа к нему.