在iOS 5中使用Storyboard时,无法将多个button分配给UINavigationItem
我是一位在开发用户界面方面有丰富经验的iOS开发人员。
我现在正在testingStoryboardfunction,因为我正在testing切换到“devise”UI而不是实现它。 在过去我坚持使用nib / xib的限制,因此我从来没有成功的开关。 所以这里来一个新的尝试故事:)
现在我的问题 – 我正在devise一个iPad的故事板,其中有一个导航控制器和桌面视图控制器。 我想添加多个UIBarButtonItems,但是我可以用Interface Builder为每一边添加一个。
代码如下所示:
UIBarButtonItem *b = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:nil action:nil]; UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; spacer.width = 20; self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:self.editButtonItem, spacer, b, nil];
但为什么我不能使用IB添加多个button? 只有leftBarButtonItem,rightBarButtonItems,backBarButtonItems …
这让我疯狂
谢谢!
编辑
在我回答这个问题的时候,Xcode并没有提供连接故事板中添加button的可能性。 提出的窍门允许仍然有故事板devise的赛段。
使用更新版本的Xcode,确保@ ecotax引入的解决scheme以及后来更详细的@ShimanskiArtem答案就是要使用的解决scheme。
我有和你一样的问题,我发现了以下的技巧
假设你有一个导航控制器,你想要有多个button。 由于iOS 5你可以分配一个数组。 问题是,你会失去使用故事板的所有好处,因为它将以编程方式完成。
我用了下面的技巧。 通常当你需要导航栏上的多个button时,你不需要一个工具栏。
在当前视图中(而不是在导航控制器中)要显示button的位置,通过更改显示工具栏
bottomBar =推测到bottomBar =工具栏。
工具栏将出现在底部。 添加UIBarButtons到这个栏。 链接到其他视图控制器使用segues等…
在你的.h文件中为每个button创build一个sockets
@property (strong, nonatomic) IBOutlet UIBarButtonItem *Button1; @property (strong, nonatomic) IBOutlet UIBarButtonItem *Button2; @property (strong, nonatomic) IBOutlet UIBarButtonItem *Button3;
然后在你的viewDidLoad()将button链接到导航栏并隐藏工具栏。 按照您想要查看的顺序的相反顺序添加它们
self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:self.Button3, self.Button2, self.Button1, nil]; self.navigationController.toolbarHidden = YES;
瞧,你在导航栏中有多个button
并在模拟器中的结果
我发现一个简单的解决scheme
1)添加以下类别:
@interface UINavigationItem(MultipleButtonsAddition) @property (nonatomic, strong) IBOutletCollection(UIBarButtonItem) NSArray* rightBarButtonItemsCollection; @property (nonatomic, strong) IBOutletCollection(UIBarButtonItem) NSArray* leftBarButtonItemsCollection; @end @implementation UINavigationItem(MultipleButtonsAddition) - (void) setRightBarButtonItemsCollection:(NSArray *)rightBarButtonItemsCollection { self.rightBarButtonItems = [rightBarButtonItemsCollection sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"tag" ascending:YES]]]; } - (void) setLeftBarButtonItemsCollection:(NSArray *)leftBarButtonItemsCollection { self.leftBarButtonItems = [leftBarButtonItemsCollection sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"tag" ascending:YES]]]; } - (NSArray*) rightBarButtonItemsCollection { return self.rightBarButtonItems; } - (NSArray*) leftBarButtonItemsCollection { return self.leftBarButtonItems; } @end
2)将您的项目添加到视图控制器(项目将按标签升序排列)
3)连接你的项目与leftBarButtonItemsCollection
或rightBarButtonItemsCollection
UINavigationItem的outlet集合
我想遵循HpTerm的build议,但在我的应用程序,我有一个工具栏和一个导航栏。
我发现他/她的评论中概述的方法也可以很容易地推广到支持这种情况。 您可以简单地将button添加到与视图控制器相同的级别,而不必添加虚拟工具栏,只需在下面的黑条中拖动即可:
或者在左边显示的文字概览中:
将属性分配给viewDidLoad中的数组仍然是HpTerm解释; 唯一的区别是没有虚拟工具栏来隐藏了。
在Xcode7中,可以直接在故事板中将多个button添加到UINavigationItem,而无需创buildIBOutlet。 只需将多个UIBarItems拖动到导航项的左侧或右侧部分即可。
@jchnxu如果你已经想出了如何完成@Shimanski Artems解决scheme去故事板,并拖动一个栏button项目的视图控制器,你有你的导航栏,并拖动它的部分,你有退出和响应图标在电池图标上方。 从那里你可以附加到collections
男人,试试这个!
self.navigationItem.rightBarButtonItems = @[self.editButtonItem, spacer, b];