2016-10-05 17 views
0

私はサブビューとしてUIViewsの束を追加しているUIViewControllerを持っています。次に、それぞれにUIGestureRecognizerを添付して、タップがあるときに通知を受けることができます。ここでのUIViewController内のコードは次のとおりです。UIGestureRecognizerイベントを取得し、ルートコンテナビューを取得する最も良い方法は?

- (void)attachSubview{ 
    UIImageView *childView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"child"]] ; 
    UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]; 
    [childView addGestureRecognizer:singleFingerTap]; 
    [self.view addSubView childView]; 
} 

- (void)tapped:(UITapGestureRecognizer *)recognizer{ 
    NSLog(@"Tapped view : %@", recognizer.view); 
    NSLog(@"The root view is : %@", self.view); 
} 

は今、ここで問題です:私は実際には別々のクラスにこれらの2つの方法を抽出したいです。この場合、self.viewtapped:メソッド内で使用することはできません。なぜなら、selfはもうviewcontrollerクラスではないからです。

私は、単にレコグナイザオブジェクトを取得し、何らかの形でイメージビューが属するルートビューを取得するのが簡単で効率的な方法を希望します。これを行う最善の方法と将来の証明方法は何ですか?

+0

カスタムサブビューを作成し、デリゲートを使用することができ、この場合は – Misha

答えて

0

お願いします。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    //example of its use. You can replace with [className attachSubview:self.view] for example 
    self.view = [self attachSubview:self.view]; 
} 

- (UIView *)attachSubview:(UIView *)passedInView{ 
    UIImageView *childView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"child"]] ; 
    UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]; 
    [childView addGestureRecognizer:singleFingerTap]; 
    [passedInView addSubview:passedInView]; 
    return passedInView; 
} 

- (void)tapped:(UITapGestureRecognizer *)recognizer{ 
    NSLog(@"Tapped view : %@", recognizer.view); 
    NSLog(@"The root view is : %@", recognizer.view.superview); 
} 
+0

はしてください受け入れて、あなたがそれをマークすることができ、あなたの問題を解決する助けました。私に知らせていないと、私がさらに助けることができるかどうかがわかります – HarmVanRisk

関連する問題