2013-04-15 3 views
0

У меня есть UITableView «людей» для моего приложения iOS. Я создал экран «добавить», чтобы добавить новых людей в мой постоянный магазин, который отлично работает.iOS не может установить свойство текста UITextField в UITableViewCell

Этот вид добавь использует форму, созданную с UITableView и подклассы UITableViewCell с, с UITextField и UILabel, которые, хотя и работает хорошо, я очень новой для программирования IOS и чувствовать, что это может быть не самым эффективным способом.

Я пытаюсь повторно использовать это добавление вида, чтобы быть моей деталью, добавлять и редактировать представление, и я могу успешно установить объект Person как свойство в подробном представлении. У меня есть следующий код в моем viewDidLoad методе, где adding свойство устанавливается в методе prepareForSegue в предыдущем ViewController:

if (self.adding) 
{ 
    self.editing = YES; 
    self.title = @"Add Person"; 
} 
else 
{ 
    self.title = self.person.name; 

    [self setDetail]; 
} 

Моя проблема заключается в том, что, когда я пытаюсь предварительно заполнить поля с моей точки зрения подробно (в мой setDetail метод), я не могу установить текст UITextField с свойством name из моего лица. Вот код, который я использую, чтобы получить UITextField и установить его свойство text:

form - UITableView;

UITableViewCell *nameCell = [form cellForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; 
UITextField  *nameField = (UITextField *)[nameCell viewWithTag:100]; 
nameField.text = self.person.name; 

Если я NSLog nameCell возвращает (null)

Я надеюсь, что это достаточно объяснение. Любые указатели помогут много!

ответ

1

Вместо того, чтобы устанавливать в viewDidLoad :, сделайте это в своих методах источника данных таблицы. т.е.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Deque the nameCell and prepare the cell if its not available. 
    UITextField  *nameField = (UITextField *)[nameCell viewWithTag:100]; 
    nameField.text = self.person.name; 
    return nameCell. 
} 
+0

Что-то так просто, но я полностью игнорировать его. Хаха спасибо! – Leon

0

Я не очень понимаю ваш вопрос, но cellForRowAtIndexPath может возвращать ноль, потому что

Возвращаемое значение
Объект, представляющий собой ячейку таблицы или ноль, если ячейка не видна или indexPath выходит за пределы допустимого диапазона.

Официальный документ: cellForRowAtIndexPath:

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