比方說,我有一個XIB文件(MyView.xib)包含一個單一的根UIView的類是一些自定義的UIView子類(MyView)。實例化自己作爲文件所有者的XIB文件中的UIView?
我想從XIB文件中創建MyView的實例(代碼中),但我也希望文件的所有者是MyView本身的實例(以便我可以將IBOutlets從XIB鏈接到代碼)。
換句話說,MyView是XIB中根視圖的類,它也被設置爲文件的所有者類。
我想是這樣的MyView的裏面執行:
- (id)initFromNib {
self = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] firstObject];
return self;
}
然後我意識到是沒有意義的,因爲在這一點上self
是零,因此該文件的所有者設置爲無(沒有好)。
這開始感覺像雞蛋問題,因爲我需要文件的所有者是在創建之前即將創建的實例。
我又試圖這樣的事情:
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:CGRectMake(0.0, 0.0, 310, 166)];
if (self) {
self = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] firstObject];
}
return self;
}
顯然,這是一個臨時的黑客只是爲了看看它是否會工作,但沒有去。該視圖被加載並正確顯示,但是當我按下其中一個按鈕(其具有關聯的IBAction)時,該應用程序崩潰。
我失去了一些東西明顯?或者我的理解有某種缺陷?
一般問題是,我只想擁有一個包含該視圖的可視化表示的關聯XIB的自定義UIView子類,並且我還希望能夠在XIB和其相應的UIView子類之間關聯IBOutlets。
歡迎任何和所有建議。
當我將IB中的Xib的文件所有者設置爲CustomClass時,這不起作用。相反,人們應該將視圖設置爲xib中的自定義類,我相信就是這樣。 – stackOverFlew
請參閱http://stackoverflow.com/a/33711143/1392515 – stackOverFlew
你知道在這種情況下MyView類是否能夠接收UI事件?那麼如果我的觀點有一個IBAction,它會被恰當地調用?從我的理解事件發送到文件的所有者。 –