Искал ответ на этот вопрос, но, похоже, не нашел окончательного решения - надеюсь, что кто-то может помочь здесь!
Я создаю мультипросмотровое приложение для iPhone. Я создал UIViewController под названием «MainViewController», который загружается в другие представления по мере необходимости. Существует довольно много навигации между экранами, поэтому я хотел бы иметь метод «ViewSwitcher» в MainViewController, который контроллеры дочерних представлений могут вызывать, чтобы попросить представление переключиться на другое дочернее представление.
Как я могу вызвать метод «ViewSwitcher» из дочерних контроллеров? В настоящее время мне удалось добиться этого, создав свойство UIView * "parent" в каждом контроллере дочернего представления и заполнив его при первой загрузке дочернего представления. Затем я могу вызвать метод, используя [parent ViewSwitcher]. Это кажется немного неуклюжим, и я обеспокоен тем, что создаю какую-то ужасно рекурсивную структуру. Есть ли способ лучше?
Заранее спасибо.
2 ответа
Вот что-то, что выглядит неуклюжим, но должно продемонстрировать общую идею:
NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];
Многое из этого можно легко заменить макросом #define
:
#define CurrentParentViewController [[self.navigationController viewControllers] objectAtIndex:[[self.navigationController viewControllers] count] - 2]
Затем вы можете использовать его следующим образом:
[CurrentParentViewController setBackBarButtonItemTitle:@"New Title"];
Это, очевидно, приведет к сбою, если вы вызовете это в самом нижнем контроллере представления в стеке навигации, но, по-видимому, вы будете знать, когда используете этот подход. Вы можете, например, вызвать [[self.navigationController viewControllers] count]
, чтобы убедиться, что вы можете запустить это.
Вы можете создать одноэлементный объект. Эта статья о cocoawithlove великолепно раскрывает эту тему. .
Похожие вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].
-viewControllers
множество. Индекс родительского контроллера представления текущего контроллера представления будет иметь индекс (длина-2) массива-viewControllers
.