Eu tenho um UIBarButtonItem abrindo uma folha de ação para oferecer aos usuários opções sobre o que fazer. Tudo funciona conforme o esperado, a menos que eu tente clicar no botão "Cancelar". O alvo do botão parece ter subido de onde deveria estar. Só posso ativá-lo clicando em algum lugar no meio dos botões "Cancelar" e "Ok".
Eu tentei planilhas de ação em outros aplicativos e elas funcionam bem, então não é apenas meu dedão. A folha de ação está abrindo em um UIViewController
- (void)showOpenOptions
{
UIActionSheet *sheet = [[UIActionSheet alloc]
initWithTitle:NSLocalizedString(@"Open link in external application?", @"Open in external application")
delegate:self
cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel")
destructiveButtonTitle:NSLocalizedString(@"Open Link", @"Open Link")
otherButtonTitles:nil];
[sheet showInView:self.view];
[sheet release];
}
ios
objective-c
iphone
cocoa-touch
uiactionsheet
nevan king
fonte
fonte
Respostas:
Em vez de passar a visão do controlador de visão atual para a folha de ação, use o
showFromTabBar:
método deUIActionSheet
.O Caminho Certo
Isso fornecerá a área tocável correta:
The Wrong Way
Isso colocará a área tocável no lugar errado (se você estiver usando uma barra de guias ou barra de ferramentas):
Se você estiver usando uma barra de ferramentas , use o
showFromToolbar:
método. Você precisará de uma referência à barra de ferramentas, provavelmente um ivarMinha velha resposta também funciona, mas é hacky:
Acabei de encontrar uma resposta possível:
http://openradar.appspot.com/6410780
Editar: funciona corretamente quando eu mudo a visualização para a visualização da barra de guias
fonte
Eu encontrei uma resposta aqui que funciona.
usando:
[filterActionSheet showInView:[self.view window]]
:;Eu tentei algumas maneiras de chegar à minha barra de guias e a forma como este aplicativo está configurado parece complicado ...
fonte
Em vez disso, use:
fonte
showInTabBar:
parashowFromTabBar:
. Observe também que há um método 'showFromToolbar: `, dependendo de qual mobília de tela você tem na parte inferior da tela. Essa, eu acho, é uma resposta melhor do que a resposta aceita.Aqui está a solução. Experimente isto:
fonte
Acho que uma combinação de três das respostas é a maneira certa de lidar com isso:
ou seja, use showFromTabBar (é por isso que existe) e você não precisa do parentViewController como Nathan apontou (na verdade, self.parentViewController.tabBarController.tabBar retorna nulo para mim.
fonte
FYI - teve o mesmo problema com a ação do UIDocumentInteractionController pisando na barra de guias. Usei o seguinte para corrigir.
fonte
escrever código simples
este trabalho bem
fonte