Доступ к indexPath из пользовательского UITableViewCell - PullRequest
2 голосов
/ 19 февраля 2011

Я пытаюсь создать UITableView, чтобы позволить пользователю вводить данные, похожие на многие настройки UITableView, с некоторыми текстовыми полями и выносками к другим табличным представлениям для флажков. Для такой распространенной функции в приложениях это не кажется очень простым.

У меня проблемы с доступом к indexPath.row из моего пользовательского UITableViewCell. Здесь я размещаю свой пользовательский UITableViewCell.

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[TextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];      
}

В @implementation моего класса TextField, в - (id) initWithStyle: я пытаюсь получить доступ к indexPath с помощью:

NSIndexPath *indexPath = [(UITableView *)self.superview indexPathForCell:self];

... для того, чтобы установить тег текстового поля как:

textRow = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 200, 21)];
textRow.tag = [indexPath row];

Может ли кто-нибудь пролить свет на мою проблему или указать мне направление создания программных базовых таблиц в стиле настройки программно.

Спасибо

1 Ответ

3 голосов
/ 19 февраля 2011

Я думаю, что проблема может заключаться в том, что во время инициализации вашей ячейки она не была добавлена ​​в UITableView - следовательно, self.superview возвращает ноль.

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[TextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];      
}
[cell setTag:indexPath.row];

Вам необходимо добавить setTag: метод к вашему TextFieldCellClass.Я предполагаю, что код был внутри cellForIndexPath или чего-то еще, поэтому indexPath будет передан этому методу.

Метод set tag должен выглядеть примерно так:

-(void)setTag:(int)tag {
    textRow.tag = tag;
}
...