2011-07-26 11 views
0

私は2つのクラスAとBを持っています。別のクラスオブジェクトでオブジェクト(UIView)にアクセスするときの問題!

クラスAには、myViewという名前のUIViewとmyViewの位置を設定するMyMethodメソッドがあります。

-(void)MyMethod:(NSString *)justCheck 
{ 
[self.view addSubview:myView]; 
[self.view bringSubviewToFront:myView]; 

CGRect mframe = [myView frame]; 

NSLog(@"------------> MyMethod Called = %@",justCheck); 


    // EDIT: the following NSLogs are added later-------------------- 

NSLog(@"------------> MyMethod Called:mframe:x = %g",mframe.origin.x);  //0 

NSLog(@"------------> MyMethod Called:mframe:y = %g",mframe.origin.y);  //42 

NSLog(@"------------> MyMethod Called:mframe:H = %g",mframe.size.height); //317 

NSLog(@"------------> MyMethod Called:mframe:W = %g",mframe.size.width); //320 


    //--------------------------------------------------------------- 

mframe.origin.y = 42; 

[myView setFrame:mframe]; 
} 

buttonOfAという名前のクラスAのボタンは、このMyMethodはを呼び出すと、それは完璧に動作し、私は位置42 コードでMYVIEWは、以下のように

-(IBAction)buttonOfA:(id)sender 
{ 
[self MyMethod:@"I am A"]; 
} 

しかし、ある見ることができますbuttonOfBという名前のクラスBのボタンは、このメソッドを呼び出そうとしたのNSLogは動作しますが、私はW、以下のように位置42コードで

-(IBAction)buttonOfB:(id)sender 
{ 
[objOfA MyMethod:@"I am B"]; //objOfA is the object of class A 
} 

をMYVIEWを見ることができません帽子はここで起こっていますか? 私は問題を理解するために努力してきましたが、私はできませんでした。 Plzは私を助けます。

ありがとう:)

EDIT:4 NSLogsをMyMethodは添加される()

+0

objOfAのような音はありません。どのように設定しますか? – hwaxxer

+0

@ hwaxxer - そのようなA * objOfA = [[A alloc] init];また、NSLogメッセージは------------> MyMethod Called =私はBだとコンソールに表示されます。 objOfA wal nilなら、それは印刷できますか? –

+0

はい、あなたは正しいです。 NSLogがうまくいきませんでした。おそらく、コール時にビューはゼロです。 – hwaxxer

答えて

0

myViewインスタンス変数がクラスAオブジェクトは初期化され、クラスBがMyMethod:を呼び出すとスーパービューに追加されます。それ以外の場合、フレームを設定しても効果はありません。

+0

質問を編集しました。私はmframeのx、y、高さと幅を取得できましたが、ビューを見ることはできません。私はmyViewが表示されていると思うが、それは見えない。それは何だろう?何か案が? –

0

は、タイプAのオブジェクトへの参照を持ち、それはUIViewのを作成し、同じオブジェクトであるべきです。したがって、オブジェクトのシングルトンインスタンスを返すほうがよいです。

クラスAオブジェクトに返されたシングルトンを使用して、メソッドを呼び出します。 MYVIEWではないので

+0

myMethodはClass Aにあり、Class Bからコールしようとしています。次に、どのように自己を使用できますか? –

+0

ああ、申し訳ありませんが私は間違って、答えを今編集します。 –

+0

答えのためのThanx :)私は初心者です。あなたはいくつかの例で答えを簡素化できますか? –

-1

プロパティはちょうどそれクラスAの財産にし、 のUIView * MYVIEWとしてそれを宣言するのではなく、

-(void)MyMethod:(NSString *)justCheck 
{ 

    CGRect mframe = [self.myView frame]; 

    NSLog(@"------------> MyMethod Called = %@",justCheck); 

    mframe.origin.y = 42; 

    [self.myView setFrame:mframe]; 
} 

が財産にするには、この作業を行います。

.hファイルにこのようなとしてそれを実行してください

@property(nonatomic,retain) UIView* myView; 

とクラスA.mでこの

@synthesize myView; 

ようにそれを行うと、あなただけの置き換えすべてのコードに何も変更する必要はありません。 myViewself.myView

+0

これを証明するコードはありません。元の質問に対する私のコメントを参照してください。 – hwaxxer

+0

ya出力形式を取得しているので、NSLogの下の5行目を参照してください。 –

+0

しかし、すでに割り当てが解除されていると、プログラムがクラッシュします。 – hwaxxer

関連する問題