Как программно вызвать метод IBAction с идентификатором отправителя?

У меня есть следующий метод 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, позволяя ему получить объект вызывающего этого метода?

3 ответа

Решение

Подпись метода является общей для распознавателя жестов и UIControls. Оба будут работать без предупреждения или ошибки. Чтобы определить отправителя, сначала определите тип...

- (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, к которому он подключен, вызвать его, или позвольте распознавателю жестов вызвать его. Они все будут работать.

Как ты хочешь:

[self handleSingleTap:self.view];

sender может чем угодно, так это id тип. Вы также можете отправить экземпляр UIButton с тегом.

Вам не нужно вызывать его, потому что вы используете методы как Selector к UITapGestureRecognizer, так что он будет вызывать автоматически, когда есть нажатие на приложение. Кроме того, если вы можете распознать двоеточие после имени методов в action:@selector(handleSingleTap:), это означает, что отправить объект типа UITapGestureRecognizer к методу. Если вы не хотите отправлять какие-либо объекты, просто удалите двоеточие и (id)sender из метода.

Другие вопросы по тегам