В UITableViewCell заставить UISwitch получить щелчок, а затем accesoryView, если переключатель включен - PullRequest
2 голосов
/ 17 ноября 2011

Я пытаюсь создать UITableViewCell, который выглядит следующим образом:

Поскольку я пока не могу опубликовать изображение, я попытаюсь описать его, сказав, что это ярлык (слева) с переключателем UIS (в центре) и аксессуаром (справа).

Надеюсь, вы получите картину ...

Идея состоит в том, что accessoryView видим, но отключен, если переключатель выключен. Когда пользователь включает переключатель, он может нажать и перейти вправо, чтобы увидеть список опций, которые он может выбрать. Проблема в том, что при нажатии на переключатель ячейка получает сигнал, а не переключатель.

Что я должен делать? (чтобы переключиться, сначала нажмите на кран). Я предполагаю, что это вещь первого отклика, но я не нахожу нужный мне магический код.

Как только я преодолею это, я, вероятно, смогу выяснить, можно ли включить / отключить аксессуар для себя ...

Спасибо.

1 Ответ

1 голос
/ 15 декабря 2011

Создайте элемент управления UISwitch и добавьте его в представление содержимого ячейки.

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"Cell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            cell.accessoryType = (UITableViewCellAccessoryNone;
            UISwitch* aSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
aSwitch.tag = [indexPath row];

            CGRect rect = cell.frame;
            CGRect switchRect = aSwitch.frame;
            switchRect.origin = CGPointMake( (rect.size.width / 2) - (aSwitch.frame.size.width / 2), 
                                               (rect.size.height / 2) - (aSwitch.frame.size.height / 2));

            aSwitch.frame = switchRect;
            [aSwitch addTarget:self action:@selector(switchSwitched) forControlEvents:UIControlEventValueChanged];
            [cell addSubview:aSwitch];


            [aSwitch release];
        }

        return cell;
    }

    - (void)switchSwitched:(UISwitch*)sender {

        if (sender.on) {

    UITableViewCell* aCell = [self.tableView cellForRowAtIndexPath:
                              [NSIndexPath indexPathForRow:sender.tag inSection:0]];

    aCell.accessoryType = (sender.on == YES ) ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone;
        }
    }

Вы также можете реализовать это по-другому, создав подкласс UITableViewCell и добавив файл пера UITableViewCell. Сделайте UIViewTableController владельцем файла nib-файла ячейки, добавьте в UIViewController IBOutlet для вложенной ячейки. Загрузите пользовательскую ячейку, используя

        [[NSBundle mainBundle] loadNibNamed:@"Your Custom Cell nib file name" owner:self options:nil];

см. Руководство по программированию Apple для iOS http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7

...