繁体   English   中英

使用IB将UISegmentedControl添加到NavigationBar

[英]Using IB to add a UISegmentedControl to a NavigationBar

我当前在视图控制器的viewDidLoad方法中以编程方式创建UISegmentedControl ,并将其分配给self.navigationItem.titleView ,将其添加到视图控制器的导航栏。

这很容易,但我希望能够在Interface Builder中做到这一点,到目前为止还没有弄清楚如何。 谷歌也没有多少帮助。 有人可以描述如何在IB中执行此操作或指向在线示例吗? 我非常感激。 谢谢,霍华德

如果你在笔尖中有整个导航堆栈,那实际上非常简单; 你可以将它拖到标题区域,IB会自动做正确的事情。

否则,您只需将分段控件添加到nib(不一定是子视图),然后从视图控制器向其添加@property IBOutlet 然后在viewDidLoad中,将其正常分配给titleView。 记得以dealloc发布,你是金色的。

试试这个(适合我):

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;

在IB中,您当然可以将视图拖动到导航控制器的中间,如果它只在一个导航项中,它将正常工作。

但是,如果将相同的视图对象引用拖动到不同导航项的标题视图区域中,这些区域将在某个时刻被推到导航控制器堆栈上,当您返回堆栈时,标题视图会消失。 导航控制器对由于某种原因在多个导航项上弹出的同一对象的引用不太满意,并且当您使用麻烦的导航项弹回到视图时它只会抛出一个拟合。

要解决这个问题,当您使用共享标题视图对象引用导航到视图时,必须显式设置和取消设置titleView对象。 例如,如果您将子类视图集后面的自定义逻辑设置为titleView,您只想实例化一次。

或者,您可以将IB中设计的UISegmentedControl存储在它自己的NIB中。 然后将FileOwner设置为将使用segmentedControl实例的viewcontroller类。 在viewcontroller类中,将segmentedcontrol声明为IBOutlet属性并将其链接到nib中的实例。

所有留给使用设计的实例然后调用:

[[NSBundle mainBundle] loadNibNamed:@"TTCustomSegmentedControl"
                              owner:self
                            options:nil];
self.navigationItem.titleView = sortSegmentControl;    

您无法在IB中设置titleView属性,但您可以通过Interface Builder创建/设置控件作为控制器视图的子项,然后在viewDidLoad方法中将其从视图中删除并将其设置为titleView:

[segControl removeFromSuperview];
self.navigationItem.titleView = segControl;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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