【问题标题】:Loading a custom UIView from xib从 xib 加载自定义 UIView
【发布时间】:2017-10-01 06:47:18
【问题描述】:

我有一个自定义的UIView,我正在以这种方式加载它

- (id)initWithFrame:(CGRect)frame withDelegate:(id)del
{
    self = [super initWithFrame:frame];
    UIView *myView;

    if (self)
    {
        NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class])
                                                      owner:self
                                                    options:nil];
        for (id object in nibViews) 
        {
            if ([object isKindOfClass:[self class]])
            myView = object;
        }

        myView.frame = frame;
        myView.backgroundColor = [UIColor clearColor];

        [self addSubview: myView];
    }

    self.delegate = del;
    return self;
}

当 UIView 方法返回 self 时,像这样加载视图时,Interface Builder 中链接的所有出口都是 nil。这不是正确的方法吗?

【问题讨论】:

标签: ios objective-c iphone uiview xib


【解决方案1】:

使用此方法从包中加载特定的 xib

UINib *nib = [UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil];

【讨论】:

    【解决方案2】:

    试试这个:

     self = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class])
                                                  owner:self
                                                options:nil] objectAtIndex:0];
    

    【讨论】:

      【解决方案3】:

      使用这个

      myView =[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil].firstObject];
      

      或者简单的你可以使用

      myView = [nibViews firstObject]
      

      【讨论】:

        【解决方案4】:

        据我了解,您在 xid 中提供了 IBOutlet,当您尝试加载视图时,您提供的这些值为零。这是可以预料的,因为您创建了一个 viwe 并将来自 xib 的视图添加为子视图。所以父视图没有设置这个值。 要解决此问题,您需要在加载视图时重新设计方法。 请尝试使用这个:

        + (id)createWithFrame:(CGRect)frame withDelegate:(id)del
        {
        
        
            NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class])
                                                              owner:nil
                                                            options:nil];
            <Provide class name> *myView = nibViews[0];
            myView.frame = frame;
            myView.backgroundColor = [UIColor clearColor];
        
            myView.delegate = del;
            return myView;
        }
        

        【讨论】:

          猜你喜欢
          • 2015-02-03
          • 2020-05-16
          • 1970-01-01
          • 2016-07-31
          • 1970-01-01
          • 2015-04-08
          • 2016-10-31
          • 1970-01-01
          • 2019-11-26
          相关资源
          最近更新 更多