У меня есть четыре UIView
s: viewA
- это вид корня, в котором есть viewB
в качестве подзаголовка. viewB
имеет viewC
в качестве подзаголовка и viewC
имеет viewD
в качестве подзаголовка. Таким образом, существует иерархия из четырех представлений. viewD
- это в основном кнопка, которую можно использовать, чтобы что-то сделать. Поскольку операция связана с базой данных, это может занять некоторое время. Поэтому я хочу, чтобы темный непрозрачный UIView
с UIActivityIndicator
в центре, чтобы рассказать пользователю подождать некоторое время и предотвратить другие нажатия, которые могут вызвать проблемы. Тем не менее, темный вид должен быть помещен в viewA
, чтобы он покрывал весь экран. Вот что я пробовал (и преуспел), но я хочу знать, есть ли более простые способы сделать это.Сделать UIView изменить свой супервизор (или супервизор)?
Доступ
viewA
изviewD
поviewD.superview.superview.superview
. Однако он не очень гибкий, поскольку после изменения иерархии эта цепочка, вероятно, будет изменена.Использование делегирования.
viewD.delegate = viewA
. Тем не менее,viewD
созданviewC
(его прямым видом), который создаетсяviewB
, который создается поviewA
. Так что, еслиviewD
,viewC
иviewB
не@property
его соответствующего суперкласса (доступ поviewA.viewB.viewC.viewD
не представляется возможным), тоviewA
не может иметь указатель наviewD
, что сделает невозможным делегирование (насколько я понимаю).NSNotification
. СделайтеviewD
сообщение@"ActivityIndicatorShouldBePutOn"
и сделайтеviewA
наблюдателем этого. ОднакоNSNotification
предназначенный для свободного эфирного телевидения. Так что это несколько неуместно.Пока этот случай идет (темная маска помещается на весь экран), я могу использовать что-то связанное с
UIApplication
, чтобы получить доступ к экрану и нанести его прямо на него. Но если я хочу поместить его только на часть экрана для другой цели, тогда это не сработает.
Поэтому я хочу спросить, есть ли лучший способ сделать это, или один из способов, упомянутых выше, является стандартным способом.
У вас нет контроллера вида в игра? –
@HermannKlecker Да У меня есть один, но поскольку 'viewD' создается' viewC', а не контроллером представления, то как может контроллер просмотра иметь какое-либо значение? – zyl1024
У меня просто появилось ощущение, что вы должны использовать контроллер вида для создания своих представлений. Это должен быть стандартный способ, о котором вы просили. Если вы этого не хотите, вы должны использовать опцию 3 или добавить новый индикатор активности непосредственно в окно. (Афайк само окно не поворачивается к портрету или вверх ногами). –