繁体   English   中英

以编程方式将UISegmentedControl添加到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM