Когда ячейка отключается. Экран всех представлений внутри освобождается из соображений производительности. Он не хранит ваш текст (NSString), и когда ячейка переходит на экран, TableView перерисовывает его, но без текста.
Ваш текст (NSString) должен рассматриваться как ваша модель. Так что в tableView: cellForRow: вам нужно каждый раз устанавливать NSString, которую вы хотите, как текст.
Некоторый код
Ваш подход близок к хорошему, но вам нужно выделить ячейку с помощью cellIdentifier как минимум 1 раз. Я полагаю, что ячейка должна быть разделена на подклассы с использованием текстового поля или подобного, как вы сделали, и использовать dequeueReusableCellWithIdentifier: для извлечения шаблона ячейки из tableView.
После того, как вы получили шаблон ячейки, вы можете настроить текст для ваших текстовых полей. Эти текстовые поля заполняются каждый раз, когда tableView: cellForRowAtIndexPath вызывается вашим tableViewDataSource с использованием NSString, хранящегося в вашей модели (NSDictionary в вашем случае).
Если вы размещаете в таблице статический номер строки, я предлагаю вам использовать перечисление, чтобы сделать ваш код более читабельным. Я предлагаю также прочитать Пристальный взгляд на ячейки табличного представления . Это очень очень полезно.
Надеюсь, что это поможет.
typedef enum {
kCellRowTemperature = 0,
kCellRowPulse
} CellRowTAG;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *cellIdentifier = @"textCell";
VitalsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[VitalsTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
switch (indexPath.row) {
case kCellRowTemperature:
cell.vitalsLabel.text = @"Temperature";
cell.textField.text = [self.childAppointmentDictionary objectForKey:@"temperature"];
self.temperatureTextField = cell.textField;
break;
case kCellRowPulse:
cell.vitalsLabel.text = @"Pulse";
cell.textField.text = [self.childAppointmentDictionary objectForKey:@"pulse"];
self.pulseTextField = cell.textField;
break;
default:
break;
}
return cell;
}