导航栏中带有返回按钮的UISegmentedControl

15
我正在编程中以编程方式将UISegmentedControl添加到导航栏,其中应该是titleView。但是如苹果文档titleView下所述,如果leftBarButtonItem不为nil,则将忽略此属性
但我也想要返回按钮。就像他们自己的图片所示!

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

谢谢。

2个回答

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];
希望这能帮到你!

9
"setegmentedControlStyle"已在iOS7中被弃用...请更新您的答案。 - Arian Faurtosh
这似乎无法与通过IBOutlet添加的分段控件一起工作。通过编程方式添加的分段控件可以完美地工作。 - Cymric

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];

我没有测试过,但应该是符合您需求的方向。


嗨,感谢您的回复。在等待期间,我匆忙编写了一个小程序来测试它。我在第一个视图控制器中放置了两个视图控制器和一个按钮,以便从第一个视图控制器转换到另一个视图控制器。在第二个视图控制器的ViewDidLoad方法中,我使用我在问题中发布的代码创建了UISegmentedControl,并voila! 它有效!我不知道为什么苹果说它行不通。:S - Isuru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接