Я пытаюсь сделать что-то, что, на мой взгляд, было бы довольно простым и вполне приемлемым. За исключением, похоже, ни того, ни другого.
Я создал XIB, владельцем которого является контроллер представления. В этом XIB я создал, среди прочего, несколько UITextFields и связал их с соответствующими IBOutlets в контроллере представления. Контроллер представления также является делегатом для UITableView, который содержится в главном представлении контроллера.
В tableView: cellForRowAtIndexPath: Затем я создаю UITableViewCell, как и следовало ожидать (повторное использование идентификаторов и т. Д.). Затем я добавляю соответствующий IBOutletted UITextField (в зависимости от текущей строки) в contentView UITableViewCell (после первого вызова removeFromSuperview для UITextField).
Это прекрасно работает при начальной загрузке представления. Однако, как только я начинаю выполнять действия, которые заставляют UITableView перезагружать свои данные, с UITextFields происходят странные вещи. А именно, большинство из них начинают исчезать из таблицы, в то время как другие резко уменьшаются в ширине.
Итак, я делаю то, чего не должен делать? Как вы можете догадаться, настройка этих UITextFields в IB чрезвычайно полезна, за исключением того, что кажется, что это неправильный подход.
Фрагмент кода из таблицыПросмотр: cellForRowAtIndexPath: ниже ...
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = nil;
int row = indexPath.row;
if (indexPath.section == kSectionReg) {
NSString *reuseIdent = @"RegCell";
cell = [aTableView dequeueReusableCellWithIdentifier:reuseIdent];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:reuseIdent] autorelease];
}
cell.detailTextLabel.font = [UIFont systemFontOfSize:15];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];
if (row == [self rowIndexForRegEmail]) {
[regEmailText removeFromSuperview];
[cell.contentView addSubview:regEmailText];
cell.detailTextLabel.text = @"Email";
} else if (row == [self rowIndexForRegPassword]) {
[regPasswordText removeFromSuperview];
[cell.contentView addSubview:regPasswordText];
cell.detailTextLabel.text = @"Password";
... etc...
}
return cell;
}