利用外部加载的Nib

时间:2016-07-19 16:24:53

标签: ios swift swift2 interface-builder

请原谅我的noob问题,但我真的需要一些帮助。我正在用swift2学习IOS开发。不幸的是,在使用Views / Nib文件时,我所遵循/完成的教程并没有真正进入高级的东西。

无论如何,我正在尝试创建一个将加载我的Nib的自定义类,我可以使用UIView类型的新实例化类的Outlets / Actions。

我能够找到一些信息让我能够正确加载我的视图并将其插入到我的tableHeaderView中,但我有点迷茫。我需要一点指导。

ReserveHeaderCell.swift

class ReserveHeaderCell : UIView{


    @IBOutlet weak var ReserveHeaderImageView: UIImageView!


    class func instanceFromNib() -> UIView {
        return UINib(nibName: "ReserveHeaderCell", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! ReserveHeaderCell
    }

}

我将xib中的类设置为此类,此外,outlet指的是父视图中的UIImageView。

ReserveViewController.swift 包含:

let reserveHeaderFrame: CGRect = CGRectMake(0,0,self.view.frame.size.width, 164)
let rhCell = ReserveHeaderCell.instanceFromNib()
rhCell.frame = reserveHeaderFrame
ReserveTableView.tableHeaderView = rhCell

这一切都有效。框架被创建,xib被加载并添加到视图中。太棒了,问题是,我无法访问 ReserveHeaderCell.swift 文件中定义的IBOutlet。另外,我真的不知道这是否是完成我想要做的事情的正确方法。

我想要完成的事情(使用obj-C完成)

- (id)initWithFrame:(CGRect)frame {
    if (self) {
        NSArray *nib = [[NSBundle mainBundle]
                        loadNibNamed:@"HeaderNib"
                        owner:self
                        options:nil];

        self = [nib objectAtIndex:0];
        // ACTIONS GO HERE

    }
    return self;
}

这样我就可以访问任何创建的IBOutlet(在对象中是H文件,但对于我的情况,它会是类,对吗?)

使用obj-c方法,我只需调用view.outlet =“”即可访问它们。

感谢任何帮助。任何可能有用的教程链接都值得赞赏。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用此代码初始化您的nib文件

let view = (NSBundle.mainBundle().loadNibNamed("MenuHeader", owner: self, options: nil)[0] as? UIView)
tableView.tableHeaderView = view

然后你的MenuHeader将是一个普通的.xib文件,里面有你的单元格,只需记住适当调整约束以适应你想要的所有屏幕。如果您已经有了UIView的类,则必须将nib文件与此类连接,然后您可以使用" view.label.text"然后改变你的价值观。请记住,在必须更改标题信息时,请保留此视图的引用或仅创建一个新视图。如果要跟踪操作,最好的方法是通过委托方法或使用NSNotificationCenter。