Потому что обычно, когда вызываются обработчики действий, они передают объект, который инициировал вызов, методу, например UIButton
или UISegmentedControl
. Но когда вы хотите вызвать метод из своего кода, а не как результат действия, вы не можете передать человека как sender
, поэтому вы передаете nil
.
Кроме того, - (IBAction)
указывает, что этот метод может быть связан с событием через Interface Builder
путем перетаскивания события Touch Up Inside
(или касания снаружи / и т. Д.) Из кнопки (или любого другого элемента управления, который имеет некоторые сортировать события) до File's Owner
и выбрать thumbTapped:
.
Например:
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.tag = 1001;
[button addTarget:self action:@selector(thumbTapped:) forControlEvents:UIControlEventTouchUpInside];
Когда касание отпущено (и касание все еще находится внутри кнопки), вызовет thumbTapped:
, передав объект button
как sender
- (IBAction)thumbTapped:(id)sender {
if ([sender isKindOfClass:[UIButton class]] && ((UIButton *)sender).tag == 1001) {
iPhoneImagePreviewViewController *previewVC = [[iPhoneImagePreviewViewController alloc] initWithNibName:@"iPhoneImagePreviewViewController" bundle:nil];
[self.navigationController pushViewController:previewVC animated:YES];
[previewVC release];
} else {
[[[[UIAlertView alloc] initWithTitle:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]
message:@"This method was called from somewhere in user code, not as the result of an action!"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil] autorelease] show];
}
}