2

コードに次のIBActionメソッドがあります。

-(IBAction)handleSingleTap:(id)sender
{
    // need to recognize the called object from here (sender)
}


UIView *viewRow = [[UIView alloc] initWithFrame:CGRectMake(20, y, 270, 60)];
// Add action event to viewRow
UITapGestureRecognizer *singleFingerTap = 
[[UITapGestureRecognizer alloc] initWithTarget:self 
                                        action:@selector(handleSingleTap:)];
[self.view addGestureRecognizer:singleFingerTap];
[singleFingerTap release];
//
UILabel *infoLabel = [[UILabel alloc] initWithFrame:CGRectMake(5,30, 100, 20)];
infoLabel.text = @"AAAANNNNVVVVVVGGGGGG";
//[viewRow addSubview:infoLabel];
viewRow.backgroundColor = [UIColor whiteColor];

// display the seperator line 
UILabel *seperatorLablel = [[UILabel alloc] initWithFrame:CGRectMake(0,45, 270, 20)];
seperatorLablel.text = @" ___________________________";
[viewRow addSubview:seperatorLablel];
[scrollview addSubview:viewRow];

そのメソッドの呼び出し元オブジェクトを受信できるようにしながら、IBActionメソッドを呼び出すにはどうすればよいですか?

4

3 に答える 3

3

メソッドシグネチャは、ジェスチャレコグナイザとUIControlに共通です。どちらも警告やエラーなしで動作します。送信者を判別するには、最初にタイプを判別します...

- (IBAction)handleSingleTap:(id)sender
{
// need to recognize the called object from here (sender)
    if ([sender isKindOfClass:[UIGestureRecognizer self]]) {
        // it's a gesture recognizer.  we can cast it and use it like this
        UITapGestureRecognizer *tapGR = (UITapGestureRecognizer *)sender;
        NSLog(@"the sending view is %@", tapGR.view);
    } else if ([sender isKindOfClass:[UIButton self]]) {
        // it's a button
        UIButton *button = (UIButton *)sender;
        button.selected = YES;
    }
    // and so on ...
}

呼び出すには、直接呼び出すか、接続されているUIControlに呼び出しさせるか、ジェスチャレコグナイザーに呼び出しさせます。それらはすべて機能します。

于 2012-09-18T05:16:04.227 に答える
1

を呼び出す必要はありません。これは、に関するメソッドを使用するSelectorためUITapGestureRecognizer、アプリをタップすると自動的に呼び出されます。また、のメソッド名の後にコロンが認識できる場合は、action:@selector(handleSingleTap:)そのタイプのオブジェクトをUITapGestureRecognizerメソッドに送信することを意味します。オブジェクトを送信したくない場合は(id)sender、メソッドからコロンとを削除するだけです。

于 2012-09-18T05:14:47.940 に答える
1

あなたが望むように:

[self handleSingleTap:self.view];

senderあなたが好きなように、それはidタイプです。タグ付きのUIButtonインスタンスを送信することもできます。

于 2012-09-18T05:15:08.470 に答える