2009-06-18 13 views
2

ちょっと!私はこの小さな問題があります。サブビュー内のメソッドを呼び出す

を私持っている私はこのような何か持っているので、私のViewControllerで2つのサブビューを追加1のViewController:

//in my viewController.m i have this: 
- (void)startIcons 
{ 
    IconHolder *newIconHolder = [[IconHolder alloc] initWithItem:@"SomeItenName"]; 
    [self.view addSubview:newIconHolder]; 
} 
- (void)onPressIcon targetIcon(IconHolder *)pressedIcon 
{ 
    NSLog(@"IconPressed %@", [pressedIcon getName]); 
} 

を、これは私のサブクラスtouchsです:今

//And in my IconHolder.m i have this: 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    //Here i need to call the method onPressIcon from my ViewController 
} 

: どうすればいいですか?最良の方法は、私のコンストラクタでViewControllerを保存するためのリンケージを作成することです。私はどうしたらいいのですか?

ありがとうございます!

答えて

1

はい、疑わしいようにそのリンクを作成する必要があります。

ビューにメンバー変数MyViewController* viewControllerを追加して、ビューを作成するときに設定してください。あなたが巧みになるためには、プロパティとしてそれを作成することができます。

ビューからviewControllerを保持してはいけないことに注意してください。ビューはすでにコントローラによって保持されていますが、保持方法が逆の場合、保持サイクルが生成され、リークが発生します。

0

リンケージを作成する代わりに、通知を使用することもできます。例えば

、IconHolder.hで

extern const NSString* kIconHolderTouchedNotification; 

IconHolder.mで

CONST NSStringの* kIconHolderTouchedNotification = @ "IconHolderTouchedNotification"。お使いのコントローラで次に

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    //Here i need to call the method onPressIcon from my ViewController 
    [[NSNotificationCenter defaultCenter] kIconHolderTouchedNotification object:self]; 
} 

- (void) doApplicationRepeatingTimeChanged:(NSNotification *)notification 
{ 
    IconHolder* source = [notification object]; 
} 

- (IBAction) awakeFromNib; 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doIconHolderTouched:) name:kIconHolderTouchedNotification object:pressedIcon]; 
} 

- (void) dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self name: kIconHolderTouchedNotification object:pressedIcon]; 
    [super dealloc]; 
} 

通知は、あなたがオブジェクト間の非常に弱いリンクをしたいとの双方向通信(すなわち、IconHolderは情報用のコントローラを依頼する必要はありませんが必要ない場合に特に優れています)、または複数のオブジェクトに変更を通知する必要がある場合。

関連する問題