2011-12-29 4 views
0

Я боролся с этой штукой какое-то время, поэтому я, наконец, решил попросить, чтобы увидеть, что я делаю неправильно.Добавить пользовательскую ячейку в UITableview без редактирования

Я создал пользовательский UITableViewCell, который имеет UITextField в качестве подвид в ячейках Content View. То, что я пытаюсь сделать, - вставить новую строку под ним со стандартным заполнителем, когда textView начнет редактирование. Я предположил, что это возможно в методе ниже, но я всегда получаю крах. Есть ли способ сделать это?

Я новичок в iOS и просмотре таблиц по-прежнему получают меня каждый раз.

- (void)textFieldDidBeginEditing:(UITextField *)textField 
    { 
     UITableView *tableView = (UITableView*)self.view; 

     if ([textField tag] == 2) { // Only add row if textfield 2 is editing 

      [tableView beginUpdates]; 
      [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[tableView indexPathForSelectedRow]] withRowAnimation:UITableViewRowAnimationTop]; 
     [tableView endUpdates]; 
     } 
    [textField setFont:[UIFont systemFontOfSize:18.0]]; 
    [textField setTextColor:[UIColor blueColor]]; 
    } 

Если у кого-то есть указатели или какая-либо ссылка (кроме документации на яблоко), это будет оценено.

+0

Является ли эта проблема встречающийся только в этом приложении или всех приложений. То, что я имею в виду, после ввода значений в UITextfeild. Проверьте, будет ли это крушение или нет. –

+0

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

+0

Проблема возникает в симуляторе или устройстве. Проверьте один раз. –

ответ

0

Вы не обновляете коллекцию, которая является источником для tableView перед вставкой.

[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[tableView indexPathForSelectedRow]] withRowAnimation:UITableViewRowAnimationTop]; 

Что это такое, он немедленно запрашивает источник данных и делегирует их. Теперь вы можете захотеть вставить «держатель места», но держит ли ваш массив или словарь все необходимое для правильного возврата данных? Если вы собираетесь вставить новую строку, и источник не будет обновлен правильно, он будет аварийно завершен. Чтобы исправить это, вам нужно изменить источник, прежде чем начинать обновления для tableView.

Я знаю, что вам не нужен документ яблока, но посмотрите на это, и это может решить вашу проблему.

http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/ManageInsertDeleteRow/ManageInsertDeleteRow.html#//apple_ref/doc/uid/TP40007451-CH10-SW9

+0

Этот документ был тем, откуда я получил эту идею. Но дело в том, что я до сих пор не знаю, могу ли я назвать это методом текстового поля didbegin. –

+0

@ AndresBucci Извините, но назовите что? Каков ваш источник в таблице? – MadhavanRP

+0

Я хочу вставить пользовательский UITableCell с его параметрами по умолчанию, поэтому, если я понял, что мне нужно сделать массив с этой новой ячейкой, а затем вставить строку? –

Смежные вопросы