2012-01-10 77 views
1

最近我在做iOS上的一個項目,我創建了一個類,即YellowTileView,我願做這樣的事情,當我點擊按鈕,一個新的瓷磚將顯示如何自定義Objective C編程中的構造函數?

-(IBAction)ShowImage:(id)sender 
{ 
    YellowTileView *yt=[[YellowTileView alloc] initWithFrame:CGRectMake(0, 0, 60, 80)]; 
    [self.view addSubview:yt]; 
} 

這項工作的罰款我。但下一步是取一個整數,用另一種方法隨機化。

我的問題是我可以自己重新定義/創建方法initWithFrame嗎?如果是的話,我該如何做到這一點,是否有任何問題,因爲我在類YellowTileView中有一些繪圖代碼?

回答

6

首先你應該知道你可以重新實現父母的所有方法。所以,你可以重新實現這樣定義的UIView初始化方法:

- (id)initWithFrame:(CGRect)frame; 

但你也可以用自己的參數列表創建自己的初始化方法。

在.h文件中:

- (id)initWithFrame:(CGRect)frame andWithRandomInt:(int)random; 

而且在.m文件:

- (id)initWithFrame:(CGRect)frame andWithRandomInt:(int)random { 
    self = [super initWithFrame:frame]; 

    if (self) { 
     _random = random; 
    } 

    return self; 
} 
3

你絕對可以 - 它應該是這個樣子:

- (id)initWithFrame:(CGRect)frame andNumber:(int)number { 
    self = [super initWithFrame:frame]; 

    if (self) { 
     myNumber = number; 
    } 

    return self; 
} 

只要您撥打一個super init...方法在某處你的構造函數,你會沒事的。

+0

所以我知道我能做到這樣: ' - (ID)initWithFrame:方法(的CGRect )frame和Number:(int)number {0} {0} {0} self = [super initWithFrame:frame和Number:number]; if(self){my_lumber = number; }' – HebitzLau 2012-01-11 15:09:22

+0

否 - 你的超類沒有'initWithFrame:andNumber:'方法 - 請參閱我編輯的答案:) – deanWombourne 2012-01-11 18:07:40

1

此外,這是常見的做法來命名你這樣的方法:

-(IBAction)showImage:(id)sender 

所以,方法名以小寫字母。請注意,您不必 - 只是所有其他開發人員都這樣做。

+0

如果沒有其他的東西,它會讓你看起來像一個老手在Objective-C :-)從歷史的角度來看,以小寫字母開頭的駱駝案例是Smalltalk-80中使用的標準,Objective-C的「Objective」部分的靈感來源於Smalltalk-80。 – Monolo 2012-01-10 10:49:43

+0

感謝我t =) – HebitzLau 2012-01-11 15:08:47

+0

是啊,我來自NeXTSTEP時代的Objective-C,所以@Monolo是非常正確的;-) – 2012-09-20 09:20:40