iphone SDK - ячейка TableView с пользовательским TextView - получить новые данные - PullRequest
0 голосов
/ 22 февраля 2010

У меня есть ячейка табличного представления с настраиваемым текстовым представлением, и теперь мне остается интересно, как мне получить доступ к тексту в текстовом поле после того, как текст был отредактирован / добавлен.

Я бы обычно знал, как это сделать, когда я рисую текстовое поле через IB, но моя ячейка textview рисуется динамически.

(т. Е. Я хотел бы захватить данные, которые подробно обновляютсяLabel.text)

Вот соответствующий код для адаптации к вашему ответу. Еще раз спасибо!

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


    //Big Text Box
    UITextView *detailLabel = [[UITextView alloc] initWithFrame:CGRectMake(30, 80, 500, 150)];
    detailLabel.tag = 20;
    [cell.contentView addSubview:detailLabel];
    detailLabel.layer.borderWidth = 1;
    detailLabel.layer.borderColor = [[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.9] CGColor];
    detailLabel.layer.cornerRadius = 10;
    detailLabel.font = [UIFont fontWithName:@"Helvetica" size:17];
    [detailLabel release];

} 

UITextView * detailLabel = (UITextView *) [cell.contentView viewWithTag:20];

switch (indexPath.row) {

case 0:
    detailLabel.text = @"no";
    break;
default:
    detailLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];
    detailLabel.hidden = NO;    

}

1 Ответ

3 голосов
/ 22 февраля 2010

Вы захотите прослушать сообщения, отправленные UITextView. Поэтому постарайтесь реализовать протокол UITextViewDelegate и зарегистрировать реализующий класс в detailLabel, используя его свойство делегат .

Когда ваш делегат получит уведомление об изменении в UITextView, вам нужно будет идентифицировать ячейку, которой в настоящее время принадлежит UITextView. При этом вы должны помнить, что клетки можно использовать повторно.

Я бы начал с рассмотрения следующего метода в классе UITableView:

- (NSArray *)visibleCells

Мы знаем, что если пользователь внес изменения в содержимое UITextView, оно должно быть в данный момент на экране и, следовательно, присутствовать в ранее упомянутом массиве. Чтобы найти его, мы используем указатель на UITextView, который изменился (это параметр в методе протокола textViewDidChange). Поэтому просто переберите массив visibleCells, получите UITextView и сравните его с измененным UITextView.

- (void)textViewDidChange:(UITextView *)textView {
....
cellsLabel = (UITextView *) [cell.contentView viewWithTag:20];
if (cellsLabel == textView)
...

Теперь у вас будет дескриптор ячейки в UITableView. Чтобы найти индекс, используйте следующий метод UITableView:

- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...