iOS5 динамически назначает действие дополнительной кнопке в UITableViewCell - PullRequest
1 голос
/ 29 октября 2011

У меня есть одно табличное представление в приложении, которое, я надеюсь, несколько частей приложения смогут использовать для публикации обновлений в табличном представлении с возможными действиями, которые пользователь может выполнить . Один из способов, который я задумал реализовать, - это большое перечисление с оператором switch с табличным представлением. В этом случае табличное представление будет выполнять действие на основе значения перечисления для ячейки таблицы. Это требует знания участвующих классов и кажется слишком сложным.

Должен быть лучший способ. Можно ли использовать селекторы с целью для вспомогательной кнопки UITableViewCell?

Я думаю, что для обычных кнопок и кнопок навигационной панели я могу сделать что-то вроде этого:

[thisIconBtn addTarget:self action:@selector(changeIconState:) forControlEvents:UIControlEventTouchUpInside];

существует ли эквивалентный способ присвоения действия аксессуару UITableView? Или я должен придерживаться большого перечисления?

спасибо!

1 Ответ

6 голосов
/ 29 октября 2011

К сожалению, 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...