15

我正在以编程方式将UISegmentedControl添加到导航栏,其中titleView应该是。但是Apple docstitleView,中提到,如果leftBarButtonItem不是零,则该属性将被忽略带有后退按钮的导航栏中的UISegmentedControl

但我想要后退按钮。就像他们已经在他们自己的图像中展示的一样

enter image description here

下面是我添加UISegmentedControl代码。

self.navigationItem.leftBarButtonItem = nil; 
UISegmentedControl *statFilter = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Filter_Personnal", @"Filter_Department", @"Filter_Company", nil]; 
[statFilter setSegmentedControlStyle:UISegmentedControlStyleBar]; 
self.navigationItem.titleView = statFilter; 

有另一种方式与后退按钮旁边加上UISegmentedControl呢?

谢谢。

回答

3

您可以使用自定义视图创建UIBarButtonItem,该视图可能是您的UISegmentedControl

下面的一些内容可能会起作用。

//create segmented control with items 
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"One", @"Two", nil]]; 

//create bar button item with segmented control as custom view 
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl]; 

//add segmented control bar button item to navigation bar 
[[[self navigationController] navigationItem] setRightBarButtonItem:barButtonItem]; 

我没有测试过这个,但它应该沿着你所需要的正确路线。

+0

嗨,感谢您的回复。在此期间,我在等待,我打了一个小程序来测试它。我把2个视图控制器,第一个按钮,以继续对另一个。在第二个View Controller的ViewDidLoad方法中,我使用我在我的问题中发布的代码和[voila](http://i.imgur.com/DlZuAwk.png)创建了UISegmentedControl!有用!我不知道苹果为什么说它不起作用。 :S – Isuru 2013-03-13 11:10:14

23

试试这个

删除此行--->self.navigationItem.leftBarButtonItem = nil;

添加这个代替

UISegmentedControl *statFilter = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Filter_Personnal", @"Filter_Department", @"Filter_Company", nil]]; 
[statFilter setSegmentedControlStyle:UISegmentedControlStyleBar]; 
[statFilter sizeToFit]; 
self.navigationItem.titleView = statFilter; 

唯一不变的是我已经加入这一行:

[statFilter sizeToFit]; 

希望这帮助!

+0

这实际上帮了我,谢谢... :) :) – tausun 2013-09-26 05:44:46

+9

'setegmentedControlStyle'从iOS7开始已弃用...你能更新你的答案吗? – 2013-11-14 00:37:03

+0

这似乎不适用于通过IBOutlet添加段控制。段控制工作以编程方式完美添加。 – Cymric 2015-06-30 07:03:07