如何创建具有多个“部分”的UIBarButtonItem?

时间:2009-05-14 16:11:52

标签: iphone objective-c cocoa-touch

我想在我的iPhone应用程序上创建一个UIBarButtonItem,它有两个“部分”。基本上我希望功能相当于YouTube iPhone应用程序“观看最多”部分中的“今天”,“本周”和“全部”按钮。

看起来这个功能并不像多个UIBarButtonItem一样,因为一次只能选择三个“部分”中的一个。有谁知道这是怎么做的?

4 个答案:

答案 0 :(得分:7)

你看到的是一个UISegmentedControl。这很容易设置。 YouTube正在做的事情(可能)是这样的:

NSArray * items = [[NSArray alloc] initWithObjects: NSLocalizedString(@"Today", @""),
                      NSLocalizedString(@"This Week", @""),
                      NSLocalizedString(@"All", @""), nil];
UISegmentedControl * switcher = [[UISegmentedControl alloc] initWithItems: items];
[items release];

// setup the switcher: correct UI style, tint, etc.
switcher.style = UISegmentedControlStyleBar;
switcher.tint = self.navigationController.navigationBar.tintColor; // unnecessary?

// set the target function -- needs to check selectedIndex property
[switcher addTarget: self 
             action: @selector(switcherTapped:)
   forControlEvents: UIControlEventValueChanged];

// set default selection
switcher.selectedSegmentIndex = 0;

// set the switcher as a custom view to use in place of the normal title
self.navigationItem.titleView = switcher;
[switcher release];

答案 1 :(得分:2)

实际上,我认为他正在描述一个UISegmentedControl,它可以添加到当前视图的导航栏中,如下所示:

UISegmentedControl *segmentedControl = ... 
self.navigationItem.titleView = segmentedControl; 
[segmentedControl release];

您可以像这样设置UISegmentedControl(“今天,上周,全部”)的片段(这也设置了控件值更改时的回调):

NSArray *sampleArray = --makeAnArrayHere--;
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] 
    initWithItems:sampleArray];
[segmentedControl addTarget:self action:
    @selector(segmentAction:) forControlEvents:UIControlEventValueChanged];

我没有从工作项目中复制此内容,因此可能会出现一些轻微的语法错误,但这应该引导您朝着正确的方向发展。

答案 2 :(得分:1)

观看YouTube应用,我认为您实际上想要使用UISegmentedControl。

答案 3 :(得分:0)

您正在寻找的是使用UITabBar的{​​{1}}控件。