Добавьте настраиваемое действие: @selector в UISwitch на TableViewCell - PullRequest
6 голосов
/ 08 июля 2010

У меня есть TableCellViewController для управления ячейками в моем UITableView. Каждая ячейка имеет метку на UISwitch (dictTypeSwitch). Желание назначить метод для переключения событий, чтобы я мог сохранить состояние кнопки.

Пока я сделал это:

назначить функцию setState для объекта:

[cell.dictTypeSwitch addTarget:self action:@selector(setState:) forControlEvents:UIControlEventTouchUpInside];

функция для обработки события:

- (void)setState:(id)sender {
    BOOL state = [sender isOn];
    NSString *rez = state == YES ? @"YES" : @"NO";
    NSLog(rez);
}

От отправителя я получаю объект UISwitch, из которого я могу получить состояние.

Пока все в порядке.

Но если я хочу сохранить состояние UISwitch, мне нужно получить rowIndex для этой ячейки. Как мне этого добиться?

The cells are made inside function cellForRowAtIndexPath. Se the code bellow:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"DictionariesTableCellViewController";
    DictionariesTableCellViewController *cell = (DictionariesTableCellViewController *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];


        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"DictionariesTableCellViewController" owner:nil options:nil];

        for (id currentObject in topLevelObjects) {
            if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                cell = (DictionariesTableCellViewController *) currentObject;
                break;
            }
        }
    }

    // Configure the cell...

    cell.dictTypeLabel.text = [NSString stringWithFormat:@"row - %i",indexPath.row];
    [cell.dictTypeSwitch addTarget:self action:@selector(setState:) forControlEvents:UIControlEventTouchUpInside];

    return cell;
}

Спасибо

1 Ответ

4 голосов
/ 08 июля 2010

Вы можете использовать свойство .tag UISwitch для хранения произвольного целого числа.Это может быть установлено в индекс строки.

Если возможно найти UITableViewCell от родителя UISwitch, вы можете получить путь индекса с помощью

NSIndexPath* indexPath = [theTableView indexPathForCell:theCell];
...