我现在创建一个UISegmentedControl
在视图控制器的编程viewDidLoad
方法,并通过将其分配给其添加到视图控制器的导航栏self.navigationItem.titleView
。
这是很容易做到的,但我希望能够做到这一点在Interface Builder以及到目前为止一直无法弄清楚如何。 谷歌并没有多少帮助的。 有人能描述如何做到这一点的IB或点到网上的例子吗? 我会觉得很感激。 谢谢,霍华德
我现在创建一个UISegmentedControl
在视图控制器的编程viewDidLoad
方法,并通过将其分配给其添加到视图控制器的导航栏self.navigationItem.titleView
。
这是很容易做到的,但我希望能够做到这一点在Interface Builder以及到目前为止一直无法弄清楚如何。 谷歌并没有多少帮助的。 有人能描述如何做到这一点的IB或点到网上的例子吗? 我会觉得很感激。 谢谢,霍华德
如果您在笔尖了整个导航栈,它实际上是很容易的; 你可以将其拖到标题区域和IB自动做正确的事。
否则,你可以添加分段控制笔尖(不一定是子视图),然后添加一个@property IBOutlet
从您的视图控制器它。 然后在viewDidLoad中,将其分配给titleview的正常进行。 请记住,在dealloc的释放,而你的黄金。
在IB你当然可以只需拖动一个视图到导航控制器的中间,它会正常工作,如果它只是一个内部的导航项目。
但是,如果同样的看法对象引用拖入会在某个时候将其推入导航控制器堆栈不同的导航项目的标题视图区域,你会遇到与旅行时从堆栈中消失标题视图的问题。 导航控制器是不太满意的同一对象上的多个导航项目弹出出于某种原因引用,它只是抛出当你弹回到与麻烦的导航项目的视图中的配合。
为了解决这个问题,必须明确地设置和取消的titleview的对象,当您导航到使用共享的标题视图对象引用的观点。 举例来说,如果你有自定义的逻辑背后设置为你只想实例一旦titleview的一个子类的观点。
或者,你可以存储UISegmentedControl
在IB设计在它自己的NIB。 然后设置FileOwner到将要使用segmentedControl实例视图 - 控制类。 在视图控制器类,声明segmentedcontrol作为一个IBOutlet属性,并在笔尖将其链接到该实例。
所有留下来使用设计的实例,然后调用:
[[NSBundle mainBundle] loadNibNamed:@"TTCustomSegmentedControl"
owner:self
options:nil];
self.navigationItem.titleView = sortSegmentControl;
刚刚尝试这一点(对我的作品):
UISegmentedControl *mSegmentedControl = [[UISegmentedControl alloc] initWithItems:
[NSArray arrayWithObjects:
@"Segment 1",
@"Segment 2",
nil]];
mSegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
mSegmentedControl.tintColor = [UIColor redColor];
[mSegmentedControl setSelectedSegmentIndex:0];
[mSegmentedControl addTarget:self action:@selector(sectionPress:)
forControlEvents:UIControlEventValueChanged];
self.navigationItem.titleView = mSegmentedControl;
你不能设置titleView
属性在IB,但你可以创建/设置控制为通过界面生成器控制器的观点的一个孩子,然后在您viewDidLoad
方法,从您的视图中删除它,并把它设置为于titleview:
[segControl removeFromSuperview];
self.navigationItem.titleView = segControl;