我有一个UIToolbar需要三个无线电样式的按钮,这意味着三个按钮一次只能按下一个按钮。该文档提到了在width属性的类引用定义中设置无线电UIBarButtonItems的可能性:
如果此属性值为正, 组合图像的宽度和 标题是固定的。如果该值为0.0 或者否定,该项设置宽度 组合图像和标题的 适合。 如果是,则忽略此属性 style使用无线电模式。默认值 值为0.0。
然而,我在UIKit框架参考中找到了“无线电”,我找不到任何以无线电方式提到的UIBarButtonItems。我知道我可以使用TabBar作为无线电接口,但TabBar与我的UI(普通按钮+单选按钮)的用途并不完全相符。我看到日历应用程序在无线电样式(List,Day,Month)中使用UIBarButtonItems,所以看起来这应该在API中的某个地方并且由HIG批准。这是隐藏在某处还是我必须使用自定义视图创建UIBarButtonItem?
答案 0 :(得分:7)
UISegmentedControl就是你想要的。它隐藏在Interface Builder中,因为它是工具栏之外的不同样式。
正常风格:
工具栏中的相同内容:
您的行为有两种选择:点按时的瞬间突出显示,或者您想要的无线电式行为。您可以使用“属性”检查器中的“瞬间”复选框进行设置:
答案 1 :(得分:1)
您是否考虑过尝试使用UISegmentedControl?您可以对其进行设置,以便一次只“按下”其中一个段。
答案 2 :(得分:0)
如果您需要在objc中实时执行此操作
为我工作。代码如下
NSArray *itemArray = [NSArray arrayWithObjects: @"One", @"Two", @"Three", nil];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:itemArray];
segmentedControl.frame = CGRectMake(35, 200, 250, 50);
segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;
segmentedControl.selectedSegmentIndex = 1;
// Uncomment this part if you need to do something when ratio state is selected. Also paste the function at the end of this post somewhere in your class.
// [segmentedControl addTarget:self action:@selector(pickOne:) forControlEvents:UIControlEventValueChanged];
UIBarButtonItem *bbi= [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
[segmentedControl release];
/*
//and paste this function somethere in your class. It prints the label in debug terminal
- (void) pickOne:(id)sender{
UISegmentedControl *segmentedControl = (UISegmentedControl *)sender;
NSLog(@"%@", [segmentedControl titleForSegmentAtIndex: [segmentedControl selectedSegmentIndex]]);
}
*/
我使用了这个(不是我的)帖子http://howtomakeiphoneapps.com/here-is-how-you-use-the-segmented-control-uisegmentedcontrol/129/
中的一些代码