Фон
- имеет пользовательский
UITableCellView
, в котором я использую пользовательский UITextField, который я добавил в качестве подпредставления (т.е. не использую обычные UITableCellView
представления
- в сценарии - нажатие на ячейку => перейти к экрану для изменения значения (через
pushViewController
/ navigationControl
). Затем после изменения нажмите кнопку НАЗАД, чтобы вернуться к UITableView
- , используя этот подход, для этого сценария нет особого обратного вызова, поэтому я использовал подход, в котором вы ловите это, используя общий
viewDidAppear
метод UITableViewController
- метод, который я использовал для обновления изменение было:
Код:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.myNormalCell.textLabel.textColor = myColor;
[self.tableView reloadData];
}
Но я отмечаю, что приведенный выше код:
- работает для обычных / существующих полей в
UITableViewCell
- НЕ работает для моих пользовательских подпредставлений textField, которые я вставил в свои пользовательские
UITableViewCell
ВОПРОС - Как в этом случае использовать мои пользовательские поля для обновления / отображения на UITableView
, когда я возвращаюсь к нему после внесения изменения?
Например:
- мне нужно как-то установить свое настраиваемое поле / подпредставление как "необходимо обновить"?
- мне нужно переопределить
reloadData
где-нибудь / как-нибудь, чтобы установить настраиваемое поле?
РЕДАКТИРОВАТЬ: Добавить код:
КОД ОТ cellForRowAtIndexPath
(а) Код, который работает со стандартом UITableViewCell
self.lookAheadDaysCell = (ConfigCell*)[tableView dequeueReusableCellWithIdentifier:@"LookAheadWeeks"];
if (self.lookAheadDaysCell == nil) {
self.lookAheadDaysCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"LookAheadWeeks"] autorelease];
self.lookAheadDaysCell.textLabel.text = @" Weeks into Future";
self.lookAheadDaysCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
self.lookAheadDaysCell.detailTextLabel.text = [self.weConfig.lookAheadWeeks stringValue];
return self.lookAheadDaysCell;
(b) Код, который не работает с настраиваемым полем в настраиваемой ячейке
self.lookAheadDaysCell = [ConfigCell cellForReuseId:@"LookAheadWeeks"
TableView:tableView
Title:@"Number of Weeks"
ShowHelp:true
Tag:9999
Delegate:self
UseTextField:false
ContentText:[self.weConfig.lookAheadWeeks stringValue]];
return self.lookAheadDaysCell;
КОД ИЗ ТАМОЖЕННОЙ КЛЕТКИ
Интерфейс:
@interface ConfigCell : UITableViewCell <UITextFieldDelegate> {
UITextField *_textField;
UILabel *_titleLabel;
}
@property (nonatomic, retain) UITextField *textField;
@property (nonatomic, retain) UILabel *titleLabel;
+ (ConfigCell*) cellForReuseId:(NSString *)reuseId TableView:(UITableView*)tableView Title:(NSString*)titleStr ShowHelp:(BOOL)showHelp Tag:(NSInteger)tag Delegate:(id)delegate UseTextField:(BOOL)useTextField ContentText:(NSString*)text;
@end
Ключевые методы:
+ (ConfigCell*) cellForReuseId:(NSString *)reuseId TableView:(UITableView*)tableView Title:(NSString*)titleStr ShowHelp:(BOOL)showHelp Tag:(NSInteger)tag Delegate:(id)delegate UseTextField:(BOOL)useTextField ContentText:(NSString*)text
{
// Get Cell (via reuse or create a new one)
ConfigCell *cell = (ConfigCell*)[tableView dequeueReusableCellWithIdentifier:reuseId];
if (cell == nil) {
// Create Cell
cell = [[[ConfigCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseId] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
// View 1 - Title Label
<<cut>>
// View 2 - TextField for entry
cell.textField = [[[UITextField alloc] initWithFrame:CGRectMake(0,0,0,0)] autorelease];
cell.textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
cell.textField.font = [UIFont systemFontOfSize:16];
cell.textField.textAlignment = UITextAlignmentLeft;
cell.textField.text = text;
if (useTextField) {
cell.textField.delegate = delegate;
cell.textField.tag = tag;
cell.textField.returnKeyType = UIReturnKeyDone;
} else {
cell.textField.userInteractionEnabled = false;
}
[cell.contentView addSubview:cell.textField];
}
return cell;
}