К сожалению, accessoryAction
из UITableViewCell
устарело с iOS 3.0.
Из справочных документов UITableViewCell :
accessoryAction
Селектор, определяющий сообщение действия для вызова
когда пользователи нажимают на вспомогательный вид. (Устаревший в iOS 3.0. Вместо этого используйте
tableView:accessoryButtonTappedForRowWithIndexPath:
для обработки кранов
на клетки.)
Однако , если ваше дополнительное представление наследует от UIControl
(UIButton
и т. Д.), Вы можете установить цель и действие с помощью метода addTarget:action:forControlEvents:
.
Примерно так (изменить в соответствии с вашими потребностями):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:kCustomCellID];
if (!cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCustomCellID] autorelease];
}
// Set the accessoryType to None because we are using a custom accessoryView
cell.accessoryType = UITableViewCellAccessoryNone;
// Assign a UIButton to the accessoryView cell property
cell.accessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
// Set a target and selector for the accessoryView UIControlEventTouchUpInside
[(UIButton *)cell.accessoryView addTarget:self action:@selector(someAction:) forControlEvents:UIControlEventTouchUpInside];
return cell;
}
Или, более традиционный маршрут (я не уверен, но я полагаю, что ваш вопрос утверждает, что это то, что вы пытаетесь избежать. Вы можете игнорировать этот блок кода, если это правда.):
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.section) {
case 0:
switch (indexPath.row) {
case 0:
// <statements>
break;
case 1:
// <statements>
break;
default:
// <statements>
break;
}
break;
case 1:
switch (indexPath.row) {
case 0:
// <statements>
break;
case 1:
// <statements>
break;
default:
// <statements>
break;
}
break;
default:
break;
}
}