Доступ к объектам в пользовательских UITableViewCells с тем же тегом? - PullRequest
0 голосов
/ 17 декабря 2011

В моем приложении я использую пользовательские UITableViewCells, загруженные из XIB. Каждая ячейка содержит 4 объекта, таких как UIImageView, UILabel, UITextField и т. Д. *

Я установил тег каждого объекта в моем cellforrowatindexpath, чтобы у каждого объекта был один и тот же тег, который также является строкой ячейки в табличном представлении.

Проблема в том, как мне получить доступ к этим объектам в ячейке, если они все имеют одинаковый тег? Как мне правильно получить доступ к этим объектам в методе, который не имеет параметра NSIndexPath?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 17 декабря 2011

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

При этом кажется, что вы можете выполнить то, что пытаетесь сделать, с помощью:

  1. Присваивание каждой ячейке, возвращенной методом cellForRowAtIndexPath, тега (перед его возвратом)
  2. Присвоение каждому объекту в ячейке тега, как вы, кажется, уже сделали

Таким образом, вы можете получить доступ к объектам ячейки (предположительно UIView s) из (где угодно) вашего UITableViewController с помощью:

UITableViewCell *cell = (UITableViewCell *)[self.tableview viewWithTag:CELL_TAG];
UIView *objectInCell = [cell viewWithTag:OBJECT_TAG];

Имейте в виду, что этопозволяют получить доступ к объекту в определенной ячейке.Если вы пытаетесь получить доступ к объектам всех ваших ячеек, вы можете просто перебрать все из них.Тем не менее, я чувствую, что в этот момент это станет неоправданно сложным.Было бы полезно, если бы вы опубликовали немного больше информации о том, чего именно вы пытаетесь достичь, используя тегирование таким образом.Надеюсь, что это поможет в то же время.

0 голосов
/ 17 декабря 2011

Не знаю, почему можно нумеровать все теги в строке одним и тем же номером, но я полагаю, у вас есть свои причины ([cell1 viewwithTag: 0] и [cell2 viewWithTag: 0] должно быть более чем достаточно для их дифференциации). )

Присвоение всем элементам одного и того же тега обычно сводит на нет цель пометить их в первую очередь, хотя, если вы ДОЛЖНЫ включить в тег номер строки (и иметь некоторое представление о размере набора результатов), вы можете пометить каждый элемент с целым числом ((кратным размеру) + item #) (например, если вы знаете, что таблица будет содержать менее 10000 результатов, вы можете пометить каждый элемент как 10001, 10002, 10003 и 10004 в первой строке, и 20001, 20002, 20003 и 20004 в следующем и т. д. Затем, чтобы обратиться к третьему элементу в 4-й строке, вы должны использовать [view withTag: 40003].

0 голосов
/ 17 декабря 2011

Вы можете получить доступ к строке выбранной ячейки с помощью этого метода:

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]

но я не уверен, что это ответит на ваш вопрос. Пожалуйста, будьте более конкретны.

...