【问题标题】:Segmented Control and its superview exist分段控制及其父视图存在
【发布时间】:2016-02-12 09:40:34
【问题描述】:

如何在设置框架之前通过检查segmentedControl及其superview是否存在来保护这个方法?

- (void)setSegmentedControlFrame {
    self.segmentedControl.frame = CGRectMake(CGRectGetMinX(self.segmentedControl.superview.frame), CGRectGetMinY(self.segmentedControl.superview.frame), CGRectGetWidth(self.segmentedControl.superview.frame), CGRectGetHeight(self.segmentedControl.superview.frame));
}

【问题讨论】:

    标签: ios objective-c uisegmentedcontrol segment superview


    【解决方案1】:

    这样做

    - (void)setSegmentedControlFrame {
       if self.segmentedControl.isDescendantOfView(self.view)
       {
          self.segmentedControl.frame = CGRectMake(CGRectGetMinX(self.segmentedControl.superview.frame), CGRectGetMinY(self.segmentedControl.superview.frame), CGRectGetWidth(self.segmentedControl.superview.frame), CGRectGetHeight(self.segmentedControl.superview.frame));
       }
    
    }
    

    【讨论】:

    • 这可以在objective-c中工作,但不会明确检查self.segmentedControl是否为空。它之所以有效,是因为将任何方法发送到 null 分别返回 null 或 0 或 false。所以当 self.segementedControl 为 null 时不会执行赋值。但是,我怀疑这是否被认为是干净的代码。
    • 没错,这个更干净漂亮。
    【解决方案2】:
    if ((self.segmentedControl) && (self.segmentedControl.superview)) {
       // do something smart here. 
    }
    

    实际上并不需要内括号。 具体来说:

    if ((self.segmentedControl != null) && (self.segmentedControl.superview != null)) {
       // do something smart here. 
    }
    

    当 && 的第一个条件被检查并评估为 false 时,第二个条件不再被执行。在其他语言中,访问空对象更成问题,这个顺序很重要。

    这是你要求的吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 2012-10-26
      相关资源
      最近更新 更多