Невозможно достичь 0-го раздела UITableView из UITableViewController - PullRequest
0 голосов
/ 17 марта 2012

У меня есть форма табличного представления, в которую пользователь должен ввести некоторую информацию (вопрос и выбор). В основном, когда пользователь щелкает последний раздел, текстовые поля и другие элементы собираются.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section==0) {
    AskCellQuestion *cell;
    cell = [tableView dequeueReusableCellWithIdentifier:@"askQuestionCell"];
    if (cell == nil) {
        cell = [[AskCellQuestion alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"askQuestionCell"];
    }
    ...
    cell.questionText.delegate = cell;
    return cell;
} else if (indexPath.section==1) {
    if (indexPath.row < numberOfChoices) {
        AskCellChoice *cell;
        cell = [tableView dequeueReusableCellWithIdentifier:@"askChoiceCell"];
        if (cell == nil) {
            cell = [[AskCellChoice alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"askChoiceCell"];
        }
        ...
        cell.choiceText.delegate = cell;
        ...
        return cell;
    } else {
        AskCellChoiceAdd *cell;
        cell = [tableView dequeueReusableCellWithIdentifier:@"askChoiceAddCell"];
        if (cell == nil) {
            cell = [[AskCellChoiceAdd alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"askChoiceAddCell"];
        }
        return cell;
    }
} else if (indexPath.section==2) {
    ...
}

// Configure the cell...
return 0;
}

В функции didSelectRowAtIndexPath я пытаюсь получить доступ к этим текстовым полям и получить их значения:

UITableView * questionFormView = [self tableView];
AskCellQuestion * questionCell = (AskCellQuestion *)[questionFormView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
NSString * questionText = questionCell.questionText.text;
NSLog(@"TXt: %@",questionText);
UIImage * questionImage = questionCell.questionImage;
NSLog(@"IMG: %@",questionImage);
NSString * questionVideo = questionCell.youtubeVideoID;
NSLog(@"VID: %@",questionVideo);

for (int i = 0; i < numberOfChoices; i++) {
    AskCellChoice * choiceCell = (AskCellChoice *)[questionFormView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:1]];
    NSLog(@"C TXt: %@",choiceCell.choiceText.text);
    NSLog(@"C IMG: %@",choiceCell.choiceImage);
    NSLog(@"C VID: %@",choiceCell.youtubeVideoID);
}

Это выводит в консоли:

2012-03-17 01:04:46.700 x[2346:207] TXt: (null)
2012-03-17 01:04:46.701 x[2346:207] IMG: (null)
2012-03-17 01:04:46.701 x[2346:207] VID: (null)
2012-03-17 01:04:46.701 x[2346:207] C TXt: TEST CHOICE 1
2012-03-17 01:04:46.701 x[2346:207] C IMG: <UIImage: 0x6ec75f0>
2012-03-17 01:04:46.702 x[2346:207] C VID: FMij4sZioBM
2012-03-17 01:04:46.702 x[2346:207] C TXt: TEST CHOICE 2
2012-03-17 01:04:46.702 x[2346:207] C IMG: <UIImage: 0x6e7ce30>
2012-03-17 01:04:46.702 x[2346:207] C VID: GfIcEzFzqKE

Короче говоря, я не могу получить доступ к текстовому полю в разделе 0. Я попытался добавить вторую строку, и он тоже возвратил ноль.Я попытался поменять разделы с вопросами и вариантами ответов, в то время он возвращал ноль для раздела 0, что соответствовало выбору.Вопросник работал хорошо.Я также попытался увеличить номера разделов, поэтому вопросительные ячейки были в разделе 1, варианты выбора были в разделе 2 и т. Д., А затем в разделе 1 он возвращал ноль. Я не мог понять, что происходит, это действительно странная проблема.

Кстати, я могу получить доступ к ячейке в didSelectRowAtIndexPath, когда indexPath равен пути индекса строки в разделе 0. Но когда это не так, он возвращает ноль, когда я [NSIndexPath indexPathForRow:0 inSection:0].

Например, в didSelectRowAtIndexPath:

if (indexPath.section==4) {
    NSLog(@"TEST 1 - %@", ((AskCellQuestion *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]).questionText.text);
    //[self askTheQuestion];
} else if (indexPath.section==0) {
    NSLog(@"TEST 2 - %@", ((AskCellQuestion *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]).questionText.text);
    NSLog(@"TEST 3 - %@", ((AskCellQuestion *)[tableView cellForRowAtIndexPath:indexPath]).questionText.text);
}

Дает этот вывод, когда я пишу 'fooBar' для ввода вопроса в секции 0 и щелкаю ячейку в секции 4 (кнопка 'Спросить'):

2012-03-17 01:38:47.125 x2516:207] TEST 1 - (null)

и дает это, когда я щелкаю ячейку в разделе 0, которая является ячейкой с вводом вопроса:

2012-03-17 01:38:44.782 x[2516:207] TEST 2 - fooBar
2012-03-17 01:38:44.793 x[2516:207] TEST 3 - fooBar

Заранее спасибо ...

1 Ответ

1 голос
/ 17 марта 2012

Я думаю, что для нажатия кнопки Добавить ячейку (раздел indexPath == 1, строка == числоOfChoices) ячейка в разделе 0, строка 0 находится вне экрана.Как я понимаю, UITableViews, UITableViewCells используются повторно.Обычно, если ячейка находится за пределами экрана, она попадает в пул для повторного использования.(Если я не прав, пожалуйста, исправьте меня.) Вызов ячейки за пределами экрана может дать или не дать правильные значения.Я бы предложил хранить значения в ячейках где-то еще (например, @property), чтобы вы могли получить их позже.

...