Как получить доступ к выбранному элементу uitablviews из делегата приложения?

Если у меня есть uitableview в uitableview (да, ячейки табличного представления верхнего уровня являются табличными представлениями, но неважно, что) на вкладке панели вкладок, и пользователь выбирает строку, как я могу получить доступ к выбранному элементу из моего делегата приложения и из панели вкладок вкладки

В основном вопрос, который у меня есть, заключается в том, что если у вас есть var где-то глубоко в вашей иерархии представлений, как может контроллер представления панели вкладок или делегат приложения получить его?


person jdog    schedule 20.02.2012    source источник


Ответы (1)


Я обычно использую определенный класс для хранения таких переменных. Исходник выглядит примерно так:

static UIView *__someView = nil;
@implementation VariableContainer
+ (void)setSomeView:(UIView *)someView {
    __someView = someView;
}
+ (UIView *)someView {
    return __someView;
}    
@end

Когда вы создаете какой-то объект, к которому хотите получить доступ из какого-то удаленного объекта, вы просто вызываете [VariableContainer setSomeView:], а когда вам нужно получить к нему доступ, [VariableContainer someView].

Это лишь один из многих способов добиться такого же результата. Несколько советов по этому поводу:

  • для каждого пользовательского объекта (например, вашего делегата приложения) поместите заголовок "@class objectName"
  • попробуйте импортировать этот контейнер только в исходные файлы (без заголовков)
  • не используйте сохранение, используйте только слабые звенья
  • вы можете разместить столько объектов, сколько пожелаете, поэтому имейте только 1 контейнер

Надеюсь, это немного поможет.

person Matic Oblak    schedule 21.02.2012
comment
Я получаю верхнюю половину этого, но маркированный список не так много. Можете ли вы привести пример реализованных пуль? Последняя пуля говорит о более чем одном объекте, но в некоторых случаях uiview var не является массивом - person jdog; 22.02.2012
comment
Если вам нужен массив, используйте массив na. Я имел в виду поместить статический UIView *__someView; статический ApplicationViewController *__mainViewController;... Все, что вам нужно. И создайте сеттеры и геттеры для каждого. Для части сохранения вам, вероятно, не нужно сохранять эти объекты. Если вы это сделаете, вы должны освободить их явно (вы забудете). Не импортируйте контейнер в файлы заголовков. На практике он может генерировать неприятные ошибки, если использовать не только ссылки. Для передачи ссылок пользовательских объектов, таких как AppNameViewController, вам необходимо импортировать его заголовок. Скорее пишите @class AppNameViewController - person Matic Oblak; 23.02.2012