Как программно вызвать метод 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
из метода.