为了提供一些背景知识,我正在制作一个基于 UINavigationControlled 的博客类型应用程序(我想它最类似于 iPhone facebook 应用程序)。无论当前处于活动状态的视图如何,NavigationBar 都会在其标题区域显示一些按钮,例如好友请求和活动通知。与 facebook 应用程序大致相同,单击这些按钮将创建一个弹出视图。
目前,我正在以一种我觉得非常低效的方式做事。对于加载的每个视图,我都在重新创建按钮并将它们添加到导航栏。我的代码如下:
//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 属性。
对此的任何帮助都会很棒!谢谢!