Как вызвать обновление пользовательского UITableViewCell после возврата к просмотру с помощью кнопки назад? - PullRequest
0 голосов
/ 10 октября 2011

Фон

  • имеет пользовательский UITableCellView, в котором я использую пользовательский UITextField, который я добавил в качестве подпредставления (т.е. не использую обычные UITableCellView представления
  • в сценарии - нажатие на ячейку => перейти к экрану для изменения значения (через pushViewController / navigationControl). Затем после изменения нажмите кнопку НАЗАД, чтобы вернуться к UITableView
  • , используя этот подход, для этого сценария нет особого обратного вызова, поэтому я использовал подход, в котором вы ловите это, используя общий viewDidAppear метод UITableViewController - метод, который я использовал для обновления изменение было:

Код:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.myNormalCell.textLabel.textColor = myColor;

    [self.tableView reloadData];    
}

Но я отмечаю, что приведенный выше код:

  1. работает для обычных / существующих полей в UITableViewCell
  2. НЕ работает для моих пользовательских подпредставлений 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;
}

1 Ответ

0 голосов
/ 10 октября 2011

хорошо, я исправил это, поместив следующую строку в "viewDidAppear"

self.lookAheadDaysCell.textField.text = [self.weConfig.lookAheadWeeks stringValue];

однако это не очень помогает мне понять, почему мне не нужна эта строка, когда я использовал стандартный текстполя в UITableViewCell перед ... отмечая, что я эффективно устанавливаю значение текста ячейки по ссылке

...