Передача значения обратно из представления - PullRequest
0 голосов
/ 13 августа 2010

Привет всем, у меня возник вопрос о редактировании значения ячейки таблицы и возврате отредактированного значения обратно в исходную ячейку.

У меня есть UITableView, который содержит 5 разделов по 1 строке в каждом. В cellForRowAtIndexPath у меня есть следующее:

static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    }   

    NSString *fieldTitle;
    switch (indexPath.section)
    {
        case 0:
            fieldTitle = @"First Name";
            break;
        case 1:
            fieldTitle = @"Last Name";
            break;
        case 2:
            fieldTitle = @"Company";
            break;
        case 3:
            fieldTitle = @"Email Address";
            break;
        case 4:

                fieldTitle = @"Password";
                break;
    }

cell.textLabel.text = fieldTitle;

Когда щелкают строку, didSelectRowAtIndexPath запускается следующим образом:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    AddField *addField = [[AddField alloc] initWithStyle:UITableViewStyleGrouped];

    addField.field = cell.textLabel.text;
    addField.title = cell.textLabel.text;
    addField.value = cell.detailTextLabel.text;

    [self.navigationController pushViewController:addField animated:YES];

}

Это устанавливает другой UITableView, который содержит один раздел и одну строку. В этой таблице используется пользовательская ячейка, которую я написал, которая содержит текстовое поле, которое пользователь может редактировать. Пользователь может нажать кнопку «Готово», чтобы вернуться к предыдущему виду.

У меня такой вопрос: как получить значение, введенное пользователем в представлении AddField, для отображения в метке detailText в выбранной ячейке таблицы в предыдущем представлении? Эта функциональность будет очень похожа на добавление заголовка нового события в собственном приложении календаря iPhone.

Спасибо за любую помощь, которую я могу получить, и дайте мне знать, если вам нужна дополнительная информация.

Ответы [ 2 ]

0 голосов
/ 13 августа 2010

Вы бы использовали делегатов для этого.Объявите протокол, который является вашим делегатом ячейки, следующим образом (из памяти, поэтому извиняюсь, если он не компилируется):

@protocol CellDelegate

@required

- (void) fieldValueChanged:(AddField *)field;

@end

Добавьте «делегат id» в ваш пользовательский класс ячейки и добавьте свойство (неатомное)., назначить) и синтезировать его.

Затем, когда вы настраиваете свою ячейку в didSelectRowAtIndexPath, вы делаете следующее:

[cell setDelegate:self];

Теперь, просматривая контроллер, вы просто реализуете этот протокол (CellDelegate), внедряетеметод fieldValueChanged .... он будет вызываться ячейкой.

Теперь в ячейке при изменении значения просто вызовите [делегат fieldValueChanged: addfield];

ПРИМЕЧАНИЕ: действительно, вы должнынастраивать AddField ВНУТРИ пользовательского класса ячейки, который вы пишете ...

0 голосов
/ 13 августа 2010

Вы пытались вызвать reloadData для исходного tableView? Конечно, вам нужно изменить код, чтобы fieldTitle получал его значения из массива NSStrings ...... и устанавливал источник данных tableview в этот массив ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...