我一直在努力解决这个问题。我一直试图在几个视图中持续RightBarButtonItem
。通过研究几个博客和网络搜索,我发现我需要在函数rightBarButtonItem
中设置-navigationController:willShowViewController:animated:
。
我的应用程序没有显示任何错误,但是当我尝试调试或使用NSLog
语句时,它显示该应用程序根本不会进入此功能。我在<UINavigationControllerDelegate>
类的界面中有RootViewController
,但我也将NSXMLParser
解析器设置为另一个类中的自身([parser setDelegate:self];
)的委托。这可能是navigationController
代表无法识别的问题。
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
//[self.navigationController.navigationItem setRightBarButtonItem:twoButtons animated:YES];
self.navigationItem.rightBarButtonItem = twoButtons;
NSLog(@"We are in navigationController delegate function");
}
答案 0 :(得分:4)
如果您希望多个视图具有相同的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
Base ViewControllers也是一个注入应用程序委托的好地方,你需要很多。这就是为什么我把它包含在代码块中,即使它不是你问题的一部分。如果您想使用按钮的共享实例或委托响应处理程序,那么您可以轻松地将该代码放入您的委托中,并利用基本视图轻松访问它。