在 UINavigationController 中添加 UISegmentedControl 作为 titleView
Posted
技术标签:
【中文标题】在 UINavigationController 中添加 UISegmentedControl 作为 titleView【英文标题】:Add a UISegmentedControl as the titleView in a UINavigationController 【发布时间】:2013-03-04 10:28:06 【问题描述】:我正在尝试以编程方式将UISegmentedControl
添加为UINavigationController
中的titleView
。但它没有出现。经过进一步调查,我发现如果根据Apple docs 未将leftBarButtonItem
设置为nil
,则titleView
属性将被忽略。所以我将它设置为nil
,但分段控件仍然没有出现!
下面是我的代码。
- (void)viewDidLoad
[super viewDidLoad];
self.navigationItem.leftBarButtonItem = nil;
UISegmentedControl *statFilter = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Personnal", @"Department", @"Company", nil]];
[statFilter setSegmentedControlStyle:UISegmentedControlStyleBar];
self.navigationItem.titleView = statFilter;
我该怎么办?我在这里错过了什么?
谢谢。
编辑:
感谢所有回复。但是,它们都不适合我,所以我进行了更深入的研究。这一定是我布置申请的方式。我可能应该早点提到这一点。道歉。
我正在创建的是一个 Storyboard 应用程序。主控制器是UITabBarController
。单击某个选项卡时,我想显示UITableViewController
。由于您无法在UITableViewController
中显示导航栏,我发现我必须添加UINavigationController
并在其中实现UITableViewController
。这就是我的应用的基本外观,
仪表板视图控制器连接到一个继承自 UINavigationController
的类
班级。也许这就是问题所在?
因为我刚刚创建了一个小型测试应用程序,所以将 UIViewController
嵌入到 UINavigationController
中,并在 UIViewController
的 ViewDidLoad 中编写了我在上面的原始问题中发布的代码,并显示了分段控件正好。现在我不知道如何在我的主应用程序中做同样的事情,因为没有其他视图控制器或任何连接到导航控制器的东西。
对不起,如果我让事情变得更糟。如果有什么不清楚的地方请评论。
【问题讨论】:
首先,您可以将UINavigationBar
与UITableViewController
结合使用。您的UITabBarController
需要包含UINavigationControllers
,有关更多信息,请参阅***.com/questions/2339177/…
【参考方案1】:
我猜你必须将 UISegmentedControll 设为 UIBarButtonItem:
更新: 此代码使 SegmentedControll 居中:
- (void)viewDidLoad
self.title = nil;
UISegmentedControl *statFilter = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Personnal", @"Department", @"Company", nil]];
[statFilter setSegmentedControlStyle:UISegmentedControlStyleBar];
NSMutableArray *buttonArray = [[NSMutableArray alloc] init];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[buttonArray addObject:flexibleSpace];
[buttonArray addObject:[[UIBarButtonItem alloc] initWithCustomView:statFilter]];
[buttonArray addObject:flexibleSpace];
self.navigationItem.leftBarButtonItems = buttonArray;
[buttonArray release];
希望对你有帮助!
【讨论】:
如果我用我的三行代码替换你的四行代码,它就会出现在我的应用程序中... 等一下,我认为有一个小问题。我会尽快给您回复。谢谢【参考方案2】:使用这个希望对你有帮助
- (void)viewDidLoad
[super viewDidLoad];
UIView * navview = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 160,80)];
self.navigationItem.leftBarButtonItem = nil;
UISegmentedControl *statFilter = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Personnal", @"Department", @"Company", nil]];
[navview addSubview:statFilter];
self.navigationItem.titleView = navview;
【讨论】:
最后一行之前的那个,应该是[navview addsubview:statFilter];
吗?
在 .h 文件中创建该 statfilter 以便我们可以在该视图中的任何位置更改图像等...以上是关于在 UINavigationController 中添加 UISegmentedControl 作为 titleView的主要内容,如果未能解决你的问题,请参考以下文章
在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?
从嵌入在 UINavigationController 中的一个视图控制器到另一个 UINavigationController
(Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换
关闭 UINavigationController 并呈现另一个 UINavigationController
带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller