有关 在self.navigationItem.titleView 中增加视图的问题

我们通常都是直接这样使用的
    NSLog ( @"self.navigationItem.titleView= %@" , self . navigationItem . titleView );
    
NSArray  *subviews =  self . navigationItem . titleView . subviews ;
    
NSLog ( @"self.navigationItem.titleView.subviews= %@" ,subviews);
    
segmentedControl  = [[ MESegmentedControl   alloc  ] initWithItems : @[ @" 通知 " , @" 纸条 " , @" 邮件 " ] ];
    
segmentedControl . frame  =  CGRectMake ( 0 0 190 28 );
    
segmentedControl . backgroundColor  = [ UIColor   clearColor ];
     self . navigationItem . titleView  =  segmentedControl ;

不过这样似乎有一个问题,当我们导航到下一级时候,这个 segmentedControl  会被调用 removeFromSuperview ,一般情况下可能没有问题,但是在一些极端情况下这个就有问题了,如题,我们上面是给 UISegmentedControl   做的一个子类,它可以有badge,这个badge是加在该类的superview上的,并且在类中我们重载了此方法
-( void )removeFromSuperview
{
    
if  ( _badgeView ) [ _badgeView   removeFromSuperview ];
    [
super   removeFromSuperview ];
}

我们原来是在上面增加了badge视图,可是现在,导航进入了下一级,这个badge视图就消失了,这很显然不是我们想要的


进一步观察了 故事板中,
有关 在self.navigationItem.titleView 中增加视图的问题_第1张图片

从中我们可以看出,在故事板中,我们给navigationItem 增加一个视图,都是采用 增加到子视图的模式,并不是采用
[ self . navigationItem . titleView   addSubview : segmentedControl ]; 这种方式的



打印一下log,我们也可以看出是这样的
self.navigationItem.titleView= <UIView: 0x8bdca20; frame = (8 5.5; 304 33); autoresize = RM+BM; layer = <CALayer: 0x8bdcc60>>
2013-12-10 17:00:59.578 MESegmentedControl[94933:70b] 
self.navigationItem.titleView.subviews= (
    "<UISegmentedControl: 0x8bdccf0; frame = (20 3; 264 29); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x8bdce80>>



综合上诉结论,我么最好是使用 [ self . navigationItem . titleView   addSubview : segmentedControl ]; 这种方式的
这种方式,在导航到下一级的时候,并不会被调用  removeFromSuperview
补充,这种情况下,被removeFromSuperview的只是那个self.navigationItem.titleView ,而不是我们的segmentedControl,如果我们没有 self.navigationItem.titleView,那首先还是要先生成一个UIView赋给self.navigationItem.titleView

你可能感兴趣的:(ios)