3 回答

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
您有很多選擇,具體取決于將如何使用“ baseView”類并將其集成到應(yīng)用程序中。目前尚不清楚您打算如何使用該類-作為UIViewController子類中的視圖,還是可重復(fù)使用的模塊化組件,意味著在整個(gè)應(yīng)用程序中實(shí)例化多次,以用于許多不同的視圖控制器。
如果您的視圖是UIViewController子類中的唯一視圖,那么Phonitive是正確的-將其與UIViewController子類.xib文件捆綁在一起,并使用UIViewController的viewDidLoad進(jìn)行最終初始化。
但是,如果您希望View類成為在不同的View Controller中多次重用的子組件,可以通過代碼集成,也可以通過包含在其他控制器的.xib文件中進(jìn)行集成,那么您需要同時(shí)實(shí)現(xiàn)initWithFrame:init方法和awakeFromNib,處理這兩種情況。如果內(nèi)部初始化總是包含來自.xib的某些對(duì)象,那么在initWithFrame中,您將需要手動(dòng)加載.xib,以支持要通過代碼創(chuàng)建窗口小部件的“客戶”類。同樣,如果.xib文件包含您的對(duì)象,則需要確保從awakeFromNib調(diào)用任何代碼所需的終結(jié)處理。
這是一個(gè)如何使用筆尖中的UI設(shè)計(jì)創(chuàng)建UIView子類組件的示例。
MyView.h:
@interface MyView : UIView
{
UIView *view;
UILabel *l;
}
@property (nonatomic, retain) IBOutlet UIView *view;
@property (nonatomic, retain) IBOutlet UILabel *l;
MyView.m:
#import "MyView.h"
@implementation MyView
@synthesize l, view;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
// Initialization code.
//
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
return self;
}
- (void) awakeFromNib
{
[super awakeFromNib];
// commenters report the next line causes infinite recursion, so removing it
// [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
- (void) dealloc
{
[l release];
[view release];
[super dealloc];
}
nib文件的外觀如下所示(除了文件所有者必須更改為MyView類)。
確保將視圖出口和標(biāo)簽出口都連接到文件所有者。而已!用于創(chuàng)建可重復(fù)使用的UIView小部件的模板。
關(guān)于此結(jié)構(gòu)的真正好處是,您可以將MyView對(duì)象的實(shí)例放置在其他nib文件中,只需將UIView放置在所需的位置/大小,然后將身份檢查器(CMD-4)中的類更改為MyView,繁榮發(fā)展,無論您想要什么視圖,都可以看到小部件的實(shí)例!就像UIKit對(duì)象一樣,您可以實(shí)現(xiàn)委托協(xié)議,以便可以將使用小部件的對(duì)象通知有趣的事件,并可以提供要顯示在小部件中的數(shù)據(jù)以對(duì)其進(jìn)行自定義。

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果您具有帶有xib文件的自定義UIView。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
id mainView;
if (self)
{
NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"HomeAllAdsView" owner:self options:nil];
mainView = [subviewArray objectAtIndex:0];
}
return mainView;
}
- (void) awakeFromNib
{
[super awakeFromNib];
}
- 3 回答
- 0 關(guān)注
- 529 瀏覽
添加回答
舉報(bào)