У меня есть UISwtch, встроенный в UITableViewCell, определенный в файле XIB. Как я могу ответить на изменение состояния коммутатора? - PullRequest
0 голосов
/ 22 июля 2010

Я построил ячейку с помощью Interface Builder. Я загружаю клетки так:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"MassCircleNGTableCell" owner: self options: nil];
    cell = circleNGCell;
    self.circleNGCell = nil;
}   
UISwitch *s = (UISwitch*)[cell.contentView viewWithTag: 20];
UILabel  *label = (UILabel*)[cell.contentView viewWithTag:19];
label.text = @"some useful text";

И эта часть работает, я получаю свой стол с пользовательскими ячейками. Но, хотя я могу установить начальное состояние, я не знаю, как реагировать на нажатие переключателем пользователем! Я попробовал это:

[leftSwitch addTarget:self action:@selector(setCircle) forControlEvents:UIControlEventTouchUpInside];

Но приложение вылетает с "[MassCircleNGViewController setCircle]: нераспознанный селектор отправлен на экземпляр 0xdd024b0 '"

Есть идеи?

[Добавлено позже (по запросу)]:

// implementation of [MassCircleNGViewController setCircle] really just a stub here
- (IBAction) setCircle: (id) sender {
    NSLog(@"setCircle sender == %@", (UISwitch*)sender);
}

Реальная проблема заключалась в том, как я пытался добавить цель. Нужно это двоеточие после имени селектора в списке аргументов!

[leftSwitch addTarget:self action:@selector(setCircle:) forControlEvents:UIControlEventValueChanged];

Ответы [ 2 ]

1 голос
/ 22 июля 2010

Хорошо, я нашел проблему. Где я это сделал:

 [leftSwitch addTarget:self action:@selector(setCircle) forControlEvents:UIControlEventTouchUpInside];

Мне нужно было добавить КОЛОН после имени селектора, чтобы получить это:

 [leftSwitch addTarget:self action:@selector(setCircle:) forControlEvents:UIControlEventTouchUpInside];

Я знаю, что видел комментарий о том, как сделать это где-то на этих форумах, но потребовалось несколько часов, чтобы понять, где я его увидел. О, я нашел очень хороший учебник по пользовательским UITableViewCells на основе XIB здесь

0 голосов
/ 22 июля 2010

Может быть одна из следующих проблем:

1 / У вас есть метод setCircle внутри вашего UITableViewCell, MassCircleNGViewController

2 / Дважды проверьте все версии.Возможно, ваш UITableViewCell освобождается при вызове метода, и теперь другой объект в той же области памяти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...