Как заполнить поле метки из выбранной строки в uitableview - PullRequest
1 голос
/ 20 декабря 2009

У меня есть uitableview, который заполняется из запроса sqlite.

Я хочу выбрать или щелкнуть строку, а затем отобразить значение этой строки в поле uilabel. Чтобы показать пользователю, что строка была выбрана.
Я также хочу передать это значение различным контроллерам, которые будут вызваны позже.

Вот копия моего cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"psystem";
    PSystem *psystem = [self.ppdm_systems objectAtIndex:indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];    
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell...
    //  self.accessoryType = UITableViewCellAccessoryCheckmark;
    cell.textLabel.text = psystem.system_id; 
    return cell;
}

Я вынул _label.text .... в моих различных экспериментах.

Теперь не работает передача значения различным контроллерам.

Используя приведенный здесь пример, контроллером источника является TableViewController, в котором устанавливается значение. Целевым контроллером является DetailViewController.
Я могу передать заголовок панели вкладок, но это из TableView -> DetailView.
Я не уверен, как вытащить из таблицы; то есть: Tableview <- DetailView, когда я нахожусь в DetailView. </p>

ТНХ

1 Ответ

2 голосов
/ 20 декабря 2009

В вашем UIViewController реализуйте:

- (MyObject *)valueForSelectedRow {
    MyCell *cell = (MyCell *)[self.tableView cellForRowAtIndexPath:[self.tableView indexPathForSelectedRow]];
    return cell.myObject;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Get value
    MyObject *object = [self valueForSelectedRow];

    // Update the label, assumed that _label is a pointer to a UILabel view object.
    _label.text = object.myValue;
}

Когда вы хотите выдвинуть новый контроллер представления, вы просто набираете -valueForSelectedRow, а затем используете это значение для нажатия на контроллер.

Предполагается, что у вас есть подкласс UITableViewCell со свойством, установленным для некоторого объекта модели. Если у вас этого нет и вы просто задаете свойство text, этот объект NSString будет вашим объектом 'модели', хотя было бы легче, если бы ваши ячейки обрабатывали объекты пользовательской модели.

РЕДАКТИРОВАТЬ: Спасибо за редактирование вашего ответа. Теперь у меня есть информация, которая мне нужна. В этой строке: cell.textLabel.text = psystem.system_id, вы настраиваете ячейку, просто устанавливая свойство текста textLabel. Это то, что я описал в параграфе выше. Я всегда создаю подкласс UITableViewCell со свойством, устанавливающим завершенный объект PSystem. Когда вы присваиваете элемент PSystem для ячейки, он будет обрабатывать его содержимое, так что вы сможете легко управлять своим представлением в виде представления. Это очень вынужденный подход, так как вам никогда не придется снова смотреть на контроллер, чтобы изменить содержимое представления.

Тем не менее, это может быть сделано так, как у вас сейчас есть. Это будет выглядеть примерно так:

- (NSString *)valueForSelectedRow {
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[self.tableView indexPathForSelectedRow]];
    return cell.textLabel.text;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Get value
    NSString *value = [self valueForSelectedRow];

    // Update the label, assumed that _label is a pointer to a UILabel view object.
    _label.text = value;
}

В этом случае ваша модель PSystem была заменена объектом NSString. Для этого достаточно, но гораздо проще получить сам объект. Хорошо, это также можно сделать, выбрав объект PSystem снова из массива p_system с помощью NSIndexPath, но все станет сложнее, когда вы придете к более сложным представлениям таблиц.

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