Цель C: Как перезагрузить данные в родительской ячейке из подкласса - PullRequest
0 голосов
/ 17 июля 2011

У меня есть UITableView с каждой ячейкой, содержащей следующие данные:

1) UILabel (список имен людей, которые нажали на кнопку)

2) Кнопка (при нажатии добавитимя кликера для списка, отображаемого в UILabel)

Кнопка является экземпляром подкласса UIControl.Таким образом, предполагается, что при нажатии кнопки я добавлю текущего пользователя в массив, используемый UILabel для отображения.

Однако я не уверен, как я могу перезагрузить родительскую ячейку (в которой кнопкасодержится)

Просто, чтобы повторить мою проблему

1) Добавление имени пользователя в список выполняется в подклассе кнопки, а не в UITableViewCell, как я могу вызвать родительскую ячейку один разЯ обновил массив?

2) Я не хочу перезагружать всю таблицу, а только конкретную ячейку, в которой пользователь нажал кнопку.

Заранее спасибо

1 Ответ

2 голосов
/ 17 июля 2011

Запишите метод действия в контроллере представления, который является источником данных табличного представления, например:

-(IBAction)reloadCell:(id)theCell {
   NSIndexPath *idxPath = [theTableView indexPathForCell:theCell];
   [theTableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:idxPath, nil]
                        withRowAnimation:YES]; // or NO ;)
}

Затем в методе -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; перед возвратом ячейки настройте его следующим образом:

// ...
[cell.theButton addTarget:self
                   action:@selector(reloadCell:)
         forControlEvents:UIControlEventTouchUpInside];
return cell;

Это вызовет метод -(IBAction)reloadCell:(id)sender;, вызываемый при касании кнопки и перезагрузке конкретной ячейки, но это решение, возможно, заставит вас переместить код, который обновляет содержимое списка, поскольку я не знаюкакое из сообщений будет отправлено первым (то, которое обновляет содержимое, или то, которое перезагружает ячейку).

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

В подклассе вашей кнопки .h

YourControllerType *tableController;

@property(assign) YourControllerType *tableController;

В вашей кнопке подкласс .m

@synthesize tableController

// in the method where you update the list
[tableController reloadCell:self.superview];

Также не забудьте правильно настроить ячейку

// ...
cell.theButton.tableController = self;
return cell;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...