use*_*395 25 interface-builder storyboard uinavigationitem ipad ios
我是一名iOS开发人员,在通过代码开发UI方面拥有丰富的经验.
我现在正在测试Storyboard功能,因为我测试切换到"设计"UI而不是实现它.在过去,我坚持使用nib/xib的极限,因此我从未成功使用过开关.所以这里有一个关于storyboading的新尝试:)
现在我的问题 - 我正在设计一个iPad故事板,它有一个导航控制器和一个Tableview控制器.我想添加多个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];
Run Code Online (Sandbox Code Playgroud)
但为什么我不能使用IB添加多个按钮?leftBarButtonItem,rightBarButtonItems,backBarButtonItems只有出口...
这真让我抓狂
谢谢!
Shi*_*tem 64
我找到了一个简单的解决方
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
Run Code Online (Sandbox Code Playgroud)
2)将您的项目添加到视图控制器(项目将按标签升序排序)
3)将您的项目与UINavigationItem leftBarButtonItemsCollection
或rightBarButtonItemsCollection
出口集合连接
HpT*_*erm 26
编辑
当我回答这个问题时,Xcode没有提供在故事板中链接添加按钮的可能性.提出的技巧仍然允许在故事板中设计segue.
对于Xcode的更新版本,肯定@ecotax引入的解决方案以及后来@ShimanskiArtem的更详细的答案是要使用的.
我遇到了和你一样的问题,我找到了以下技巧
假设您有一个navigationController,您希望在其中拥有多个按钮.从iOS 5开始,您可以分配一个数组.问题是您将失去使用故事板的所有好处,因为它将以编程方式完成.
我使用了以下技巧.通常,当您想要导航栏上的多个按钮时,您不需要工具栏.
在要显示按钮的当前视图(不在导航控制器中)中,通过更改显示工具栏
bottomBar =推断到bottomBar =工具栏.
工具栏将显示在底部.将UIBarButtons添加到此栏.使用segues等将它们链接到其他视图控制器......
在.h文件中为每个按钮创建一个插座
@property (strong, nonatomic) IBOutlet UIBarButtonItem *Button1;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *Button2;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *Button3;
Run Code Online (Sandbox Code Playgroud)
然后在viewDidLoad()中将按钮链接到导航栏并隐藏工具栏.按照您要查看的顺序的相反顺序添加它们
self.navigationItem.rightBarButtonItems =
[NSArray arrayWithObjects:self.Button3, self.Button2, self.Button1, nil];
self.navigationController.toolbarHidden = YES;
Run Code Online (Sandbox Code Playgroud)
并且您的导航栏中有多个按钮
以及模拟器中的结果
eco*_*tax 15
我想按照HpTerm的建议,但在我的应用程序中,我确实有一个工具栏和一个导航栏.
我发现他/她的评论中概述的方法可以很容易地推广到支持这个案例.您可以通过在下面的黑色栏中拖动按钮,而不是添加虚拟工具栏,只需在与视图控制器相同的级别添加按钮:
或在左侧显示的文字概述中:
在viewDidLoad中将属性分配给数组仍然是HpTerm解释的; 唯一的区别是没有虚拟工具栏可以隐藏了.
归档时间: |
|
查看次数: |
13473 次 |
最近记录: |