如何以编程方式将UISegmentedControl添加到UINavigationBar?
我不想为此使用XIB文件。
我有一个带有UITableView的UIView,它被添加为子视图。
我尝试了两种方法,但两种方法都不尽如人意:
1)
self.segmentedControl = [[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"All",@"Subject",@"Category",@"Finished",nil]];
self.segmentedControl.backgroundColor = [UIColor cloudsColor];
[self.segmentedControl setSelectedSegmentIndex:0];
[self.segmentedControl addTarget:self action:@selector(segmentedControlHasChangedValue) forControlEvents:UIControlEventValueChanged];
self.mainView.tableHeaderView = self.segmentedControl;
第一个失败的原因是在UITableView中,当用户滚动时,分段控件也会滚动!我不希望这种情况发生。它必须保持固定在顶部。
2)第二次尝试
UISegmentedControl *statFilter = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Filter_Personnal", @"Filter_Department", @"Filter_Company", nil]];
[statFilter setSegmentedControlStyle:UISegmentedControlStyleBar];
[statFilter sizeToFit];
self.navigationItem.titleView = statFilter;
这删除了我的头衔!我在UINavigationBar的顶部有一个标题,这个方法将其删除!!
以下是我想要完成的示例:UISegmentedControl below UINavigationbar in iOS 7
UISegmentedControl必须作为UINavigationBar的一部分留在下面,并且必须低于标题!
谢谢!
答案 0 :(得分:1)
使用tableView:viewForHeaderInSection:
(可能tableView:heightForHeaderInSection:
)代替tableHeaderView
。将tableStyle
设置为UITableViewStylePlain
(这应该是默认设置)。
答案 1 :(得分:1)
您可以使用以下代码:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
if (section == 0) {
UIView *viewHeader = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"All",@"Subject",@"Category",@"Finished",nil]];
segmentedControl.backgroundColor = [UIColor cloudsColor];
[segmentedControl setSelectedSegmentIndex:0];
[segmentedControl addTarget:self action:@selector(segmentedControlHasChangedValue) forControlEvents:UIControlEventValueChanged];
segmentedControl.frame = CGRectMake(0, 20, viewHeader.frame.size.width, 50);
[viewHeader addSubview:segmentedControl];
return viewHeader;
}
return nil;
}
希望这会有所帮助。 感谢。
答案 2 :(得分:0)
正如其他海报所建议的那样,您可以将分段控件放在表格视图上方和导航栏下方,但是您需要向下移动表格视图。
...或者,您可以将分段控件添加为tableHeaderView。
第三种选择是将其实际添加到导航栏。要做到这一点,你必须把它变成一个navBarItem。像这样:
UISegmentedControl *statFilter = [[UISegmentedControl alloc]
initWithItems:
[NSArray arrayWithObjects:
@"Filter_Personnal",
@"Filter_Department",
@"Filter_Company",
nil]];
[statFilter setSegmentedControlStyle:UISegmentedControlStyleBar];
[statFilter sizeToFit];
UIBarItem *theBarItem = [[UIBarItem alloc] initWithCustomView: statFilter];
self.navigationItem.rightBarButtonItem = theBarItem;