[英]Programmatically add UISegmentedControl in UIToolbar below UINavigationBar
[英]Programmatically add a UISegmentedControl to a UINavigationBar
如何以编程方式将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的顶部有一个标题,此方法将其删除!
这是我要完成的示例: iOS 7中UINavigationbar下面的UISegmentedControl
UISegmentedControl必须作为UINavigationBar的一部分固定在下面,并且必须在标题下面!
谢谢!
使用tableView:viewForHeaderInSection:
并且可能使用tableView:heightForHeaderInSection:
tableView:viewForHeaderInSection:
代替tableHeaderView
。 将tableStyle
设置为UITableViewStylePlain
(这应该是默认值)。
您可以使用以下代码:
- (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;
}
希望这可以帮助。 谢谢。
正如其他海报所建议的那样,您可以将分段控件放在表格视图上方和导航栏下方,但是您需要向下移动表格视图。
...或者,您可以将分段控件添加为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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.