将按钮添加到NavigationBar的titleview而不必重复代码
为了给出一些背景,我制作了一个基于UINavigationControlled的博客类型应用程序(我认为它最接近iPhone的Facebook应用程序)。无论当前处于活动状态的视图如何,NavigationBar都会在其标题区域显示一些按钮,例如好友请求和活动通知。与facebook应用程序大致相同,单击这些按钮将创建一个弹出视图。将按钮添加到NavigationBar的titleview而不必重复代码
目前,我正在以一种让我觉得效率非常低的方式做事。对于加载的每个视图,我正在重新创建这些按钮并将它们添加到导航栏中。我的代码如下:
//Setup the custom middle buttons
UIView *container = [[UIView alloc] init];
container.frame = CGRectMake(0, 0, 80, 44);
// create a button and add it to the container
UIButton *notificationButton = [UIButton buttonWithType:UIButtonTypeCustom];
notificationButton.frame = CGRectMake(0, 0, 35, 44);
[notificationButton addTarget:self
action:@selector(showNotifications:)
forControlEvents:UIControlEventTouchUpInside];
[container addSubview:notificationButton];
// add another button to the container
UIButton *friendActivityButton = [UIButton buttonWithType:UIButtonTypeCustom];
friendActivityButton.frame = CGRectMake(45, 0, 35, 44);
[friendActivityButton addTarget:self
action:@selector(showFriendActivity:)
forControlEvents:UIControlEventTouchUpInside];
[container addSubview:friendActivityButton];
// Set the titleView to the container view
[self.navigationItem setTitleView:container];
[container release];
由于我的应用程序有多个视图和导航栏始终可见,似乎傻保持对重建的按钮,将它们添加到一个容器视图,然后补充说,以于titleview的导航控制器。
什么是达到同样效果的更好方法?我正在研究子类化或为UINavigationBar创建一个类别,并且可能会在容器视图代码中添加。但是,我不知道如何让这些选择器在这些情况下工作。我也不确定如何使用UINavigationBar类访问titleView属性。
任何帮助,这将是伟大的!谢谢!
我建议只是把上面的代码放在UIViewController
类别(或者UIViewController
子类,如果你可以从一个根目录继承你所有的视图控制器的话)。然后在viewDidAppear
中,只需调用上面的代码(或将其放在超类的viewDidAppear
中)。我认为子类UINavigationBar
会比它的价值更麻烦。
如果您确实想避免重新创建按钮(可能没有理由这样做,但如果出于某种原因对您很重要),则可以将按钮连接到某个单独对象而不是将它们指向self
。单例可以直接处理响应,将消息转发给活动视图控制器,或发布活动视图控制器可以侦听的通知。
谢谢,这样一个简单的解决方案。我知道我错了! – kurisukun 2012-04-05 02:01:47