получить UITableViewCell из NSIndexPath?

Я использую несколько UITableView с пользовательскими ячейками в одном viewController. Пользовательская ячейка имеет textFields, я могу редактировать текстовые поля. Теперь я хочу получить tableViewCell точного UITableView в методе делегата textField при редактировании textField?

Помните, что есть несколько tableViews, я хочу получить точную ячейку точной таблицы, которую редактирую. Любая помощь?


person Nisar Ahmad    schedule 14.07.2015    source источник
comment
Я предлагаю зацикливаться на верхних представлениях, пока вы не получите экземпляр uitableviewcell, а затем проверьте, является ли он типом вашего пользовательского класса.   -  person iShaalan    schedule 14.07.2015
comment
Я бы рекомендовал, чтобы контроллер представления управлял только одним табличным представлением.   -  person Christian Schnorr    schedule 14.07.2015
comment
в обоих ваших таблицах есть текстовое поле ??   -  person Gaurav Patel    schedule 14.07.2015


Ответы (2)


Вы должны иметь тег для обоих tableview

используйте приведенный ниже код в делегате текстового поля

UITableViewCell *cell = (UITableViewCell *) textField.superview.superview.superview;
UITableView *curTableView = (UITableView *)cell.superview;
NSIndexPath *indexPath = [curTableView indexPathForCell:cell];
person Gaurav Patel    schedule 14.07.2015
comment
Это очень плохая идея. Если Apple когда-либо изменит иерархию представлений, ваше приложение не будет работать (они делали это раньше). - person CW0007007; 14.07.2015

НИКОГДА не перебирайте супервизоры, правильный и самый надежный способ сделать то, что вы хотите, это:

    CGPoint textViewPosition = [textView convertPoint:CGPointZero toView:self.tableView];
    CGRect senderFrame = CGRectMake(textViewPosition, textViewPosition, textView.frame.size.width, textView.frame.size.height);
    NSArray *indexPaths = [self.tableView indexPathsForRowsInRect:senderFrame];
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[indexPaths firstObject];

Это может стать более сложным, поскольку у вас есть разные представления таблиц в 1 представлении, я предлагаю переосмыслить, почему у вас более 1 представления таблицы, и посмотреть, не можете ли вы сделать это более эффективным способом, т.е. 1 представление таблицы с настраиваемыми разделами и т. д.. .

person CW0007007    schedule 14.07.2015
comment
этот сценарий невозможен в этом коде, потому что в методе текстового поля мы не знаем о табличном представлении для [textView convertPoint:CGPointZero toView:self.tableView]; - person Gaurav Patel; 14.07.2015
comment
Вам нужно реструктурировать свой код, чтобы делегат находился в правильном месте. - person CW0007007; 15.07.2015