2012-01-10 6 views
1

最近私は、私が作成した、すなわちYellowTileViewクラスを、iOSのプロジェクトをやっている、私はボタンをクリックしたときのような何かをしたいと思い、新しいタイルがObjective Cプログラミングでコンストラクタをカスタマイズするには?

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

この作品の罰金のために表示されます私。しかし、次のステップは、別の方法でランダム化した整数を取ることです。

私の質問は、自分でメソッドinitWithFrameを再定義/作成できますか?はいの場合、私はこれをどうやって行うことができますか?クラスにいくつかの描画コードがあるので、問題はありますか?

答えて

6

まず、すべての親メソッドを再実装できることがわかります。だから、のUIViewの初期化メソッドを再実装することができ、このように定義:

- (id)initWithFrame:(CGRect)frame; 

しかし、あなたはまた、独自のパラメータのリストを使用して独自の初期化メソッドを作成することができます。

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

そして.Mファイルに:.hファイルで

- (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 andNumber:(int)number { self = [スーパーinitWithFrame:フレームと番号:番号]; if(self){ myNumber = number; } ' – HebitzLau

+0

いいえ - あなたのスーパークラスは' initWithFrame:andNumber: 'メソッドを持っていません - 私の編集された答えを見てください:) – deanWombourne

1

また、それはこのようにあなたの方法に名前を付けるために一般的な方法です:

-(IBAction)showImage:(id)sender 

だから、メソッド名は小文字で始めます。注意する必要はありません - それは他のすべての開発者が行うことだけです。

+0

それ以外のものはObjective-Cの古い手のように見えます:-)歴史的な展望、小文字で始まるラクダのケースは、Objective-Cの「客観的な」部分のインスピレーションであるSmalltalk-80で使われた標準であった。 – Monolo

+0

感謝の気持ち=) – HebitzLau

+0

ええ、私はObjective-CのNeXTSTEP時代から来ているので、@Monoloはとても正しいです;-) –

関連する問題