2011-12-28 2 views
4

У меня есть пользовательский ViewController, который предназначен для многоразового использования, и произвольное количество экземпляров будет соединено вместе в NavigationController в Storyboard, все из которых будут иметь одну и ту же модель, что и делегат.iOS: Уникальная идентификация ViewControllers из раскадровки

ViewController необходимо указать модель, в которой они представлены. В настоящее время у них есть свойство int, которое они получают от segue, но оно не кажется очень идиоматичным и не поддается множественным экземплярам на экране (для iPad). Я полагаю, что это должен быть более чистый способ сделать это, так кто-нибудь знает, что это такое? Благодарю.

РЕЗУЛЬТАТ: self.view.tag

ответ

7

UIView UIViewController имеет более tag свойство, которое можно установить в любом месте вы хотите. Вы также можете просто определить тип контроллера, используя [self class]. Или просто используйте расположение памяти, напрямую ссылаясь на контроллер.

Обновление. Вы можете просто реализовать уникальный идентификатор для UIViewController, используя категорию.

+0

«Идентификатор» выглядел многообещающим, но на самом деле он не является свойством UIViewController. Это экземпляры одного и того же класса, поэтому '[self class]' не будет работать, и место памяти изменяется, если контроллер де- и повторно назначен. – mgold

+0

@mgold О, оказывается, в контроллере нет идентификатора. Странно, потому что Xcode действительно показал это в IB. Я бы рекомендовал реализовать его самостоятельно, используя протокол, который реализуют все контроллеры. Также: «Идентификатор» также исчез после освобождения, и я уверен, что адреса памяти никогда не меняются при нормальной работе. –

+0

Это в основном то, что я делаю, но я не могу найти хороший способ установить идентификатор. Использование поля в SToryboard/IB было бы идеальным, так как экземпляры уже выложены. – mgold

1

Я думаю, что «самый чистый» способ с точки зрения архитектуры дизайна, возможно, был бы множеством ViewControllers. (Это можно было бы управлять в делегате приложения.) Однако есть соображения памяти - на iPhone, который вы, скорее всего, захотите создать, и уничтожьте контроллеры представлений по мере необходимости. Массив может содержать identifier и, возможно, некоторую другую информацию, относящуюся к модели, чтобы воссоздать контроллеры по мере необходимости.

0

Жаль, что нет собственности storyboardIdentifier UIViewController. Они могут быть созданы с помощью этого идентификатора, но было бы полезно, если viewcontroller может запросить его идентификатор.

Смежные вопросы