如何使用无线电接口创建UIBarButtonItems?

时间:2009-11-14 01:54:07

标签: iphone cocoa-touch uikit uibarbuttonitem

我有一个UIToolbar需要三个无线电样式的按钮,这意味着三个按钮一次只能按下一个按钮。该文档提到了在width属性的类引用定义中设置无线电UIBarButtonItems的可能性:

  

如果此属性值为正,   组合图像的宽度和   标题是固定的。如果该值为0.0   或者否定,该项设置宽度   组合图像和标题的   适合。 如果是,则忽略此属性   style使用无线电模式。默认值   值为0.0。

然而,我在UIKit框架参考中找到了“无线电”,我找不到任何以无线电方式提到的UIBarButtonItems。我知道我可以使用TabBar作为无线电接口,但TabBar与我的UI(普通按钮+单选按钮)的用途并不完全相符。我看到日历应用程序在无线电样式(List,Day,Month)中使用UIBarButtonItems,所以看起来这应该在API中的某个地方并且由HIG批准。这是隐藏在某处还是我必须使用自定义视图创建UIBarButtonItem?

3 个答案:

答案 0 :(得分:7)

UISegmentedControl就是你想要的。它隐藏在Interface Builder中,因为它是工具栏之外的不同样式。

正常风格:

normal segmented control

工具栏中的相同内容:

bar segmented control

您的行为有两种选择:点按时的瞬间突出显示,或者您想要的无线电式行为。您可以使用“属性”检查器中的“瞬间”复选框进行设置:

segmented control attributes

答案 1 :(得分:1)

您是否考虑过尝试使用UISegmentedControl?您可以对其进行设置,以便一次只“按下”其中一个段。

答案 2 :(得分:0)

如果您需要在objc中实时执行此操作

  1. 使用您选择的单选按钮
  2. 创建一系列搅拌
  3. 创建并将您的UISegmentedControl放入UIBarButtonItem。
  4. 将UIBarButtonItem添加到您的navigationItem
  5. 为我工作。代码如下

    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/

    中的一些代码