Estou fazendo um aplicativo onde adiciono uma subvisão a uma visão usando addSubview:
em um IBAction
. Da mesma forma, quando o botão com isso IBAction
for tocado novamente, deve-se chamar removeFromSuperview
aquela subvisualização adicionada a IBAction
:
PSEUDO-CÓDIGO
-(IBAction)showPopup:(id)sender
{
System_monitorAppDelegate *delegate = (System_monitorAppDelegate *)[[UIApplication sharedApplication] delegate];
UIView *rootView = delegate.window.rootViewController.view;
if([self popoverView] is not on rootView)
{
[rootView addSubview:[self popoverView]];
}
else
{
[[self popoverView] removeFromSuperview];
}
}
ios
cocoa-touch
uiview
uikit
pmerino
fonte
fonte
addSubview:
método (o que provavelmente é o caso da primeira vez), na próxima vez, você alcançará a parte else, porque a segunda visualização agora é uma subvisão da primeira. Não é o que você estava tentando fazer? Você está procurando outro mecanismo como prensent um view controller modalmente?popoverView
é uma subvisão de rootView (rootViewController). Quero verificar se está na tela (se tem rootView como superview) e se tiver, remova-o ou então adicione-o se não[self popoverView]
retornando um popover recém-criado a cada vez? não pode adicionar uma visão "sobre ela" se for a mesma visão, adicionando uma visão que já existe em um ambiente autônomo. se opopoverView
método estiver criando um novo a cada vez, ele sempre não estará na hierarquia de visualizaçãoExperimente isto:
fonte
fonte
O equivalente do Swift será mais ou menos assim:
fonte
Verifique a visão geral da subvisualização ...
fonte
Sua condição if deve ser como
fonte
isDescendantOfView:
?Aqui usamos duas visualizações diferentes. A visão pai é aquela na qual procuramos a visão descendente e verificamos se foi adicionada à visão pai ou não.
fonte