2013-05-19 2 views
0

У меня есть UITableView, что я хочу изменить некоторые из статических ячеек после выполнения другой обработки. У меня есть настройки для ячеек, которые я хочу изменить, но когда я смотрю на них, используя NSLog, они показывают nil, что указывает на то, что у меня нет правильной ячейки. Например, на изображении ниже, я хочу, чтобы добавить время начала ярлыка так же, как я сделал для Date (дата была сделана при создании ячейки, для которых я получил текущую дату),Как изменить текст ячейки таблицы?

enter image description here

I нажмите на индикатор раскрытия, который приведет меня к другой сцене (это было создано в Раскадке, используя segues, чтобы перейти с одной сцены на другую), где я получаю два раза, в которых я нуждаюсь. Затем я возвращаюсь к основной сцене (показано) и пытаюсь изменить метку «Время начала», но ничего не происходит. NSLog этикетки до пытается изменить его возвращает это:

oStartTimeCell.textLabel.text: (нуль)

Я прочитал в одном из документации Apple, что это текстовое поле является Read- только. Если это правда в этом случае, есть ли способ перезагрузить ячейки обновленной информацией? Или есть другой способ сделать это?

+0

Со статическими ячейками вы устанавливаете розетки между вашим контроллером и метками в ячейках, а не самими ячейками. – rdelmar

ответ

2

Вы используете неправильный подход. Вы не должны создавать ссылку на ячейку, используя розетку. Когда ячейка выходит из видимого вида, выход будет либо нулевым, либо содержать данные мусора. Даже если (в вашей ситуации) ячейка никогда не выйдет из поля зрения, я думаю, она показывает, что вы пытаетесь использовать UITableView таким образом, который не должен был быть.

Вместо этого введите данные, которые вы хотите отобразить в своих ячейках в источнике данных, например. массив.

TableView должен использовать dataSource для настройки значений, отображаемых в текстовых ячейках ячеек. После того, как вы хотите обновить текст, отображаемый в ячейках, измените значения в источнике данных и вызовите reloadData в таблицеView, чтобы заставить tableView вызвать -tableView:cellForRowAtIndexPath: и связанные с ним методы UITableViewDataSource.

+0

Я думаю, что вы что-то здесь ... прямо сейчас, таблица использует статические ячейки; Мне нужно будет изменить их на динамические .. я его код, и я вернусь к вам, вероятно, завтра ... – SpokaneDude

0

Попытка создать IBOutlet для каждой ячейки и подключить его:

IBOutlet UITableViewCell *cell1; 
IBOutlet UITableViewCell *cell2; 
IBOutlet UITableViewCell *cell3; 

А также изменить свой метод:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if(indexPath.row == 0) return cell1; 
    if(indexPath.row == 1) return cell2; 
    if(indexPath.row == 2) return cell3; 

    if (cell == nil) { 
     //create cell; 
    } 
    return cell; 
} 
+0

-cellForRrowAtIndexPath только вызывается, когда ячейки изначально создаются; как только я вернусь, он снова не будет вызван. Розетки уже были созданы и заполнены данными, полученными мной из подпрограмм даты/времени. – SpokaneDude

0

Вы используете UILabel для отображения текста? , Если вы просто создаете выход на UIlabel и обновите его любым способом, например cellForRwoAtIndexPath или didSelectRowAtIndexPath и т. Д., Который вызывается после загрузки таблицыView.

Если вы не используете UILabel и используете только cell.textLabel, вы можете сделать что-то вроде cell.textLabel.text = @"ChangedText" в cellForRowAtIndexPathMethod. Убедитесь, что вы редактируете требуемую ячейку, проверив indexPath.row

Do [tableView reloadData] для вызова cellForRowAtIndexPath.

+0

-cellForRowAtIndexPath никогда не вызывается после начального построения ячеек ...(см. комментарий ниже) – SpokaneDude

+0

ли вы reloadData? – ila

+0

да, и он ничего не делает ... – SpokaneDude

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