Pergunta

Eu tenho um controlador UITabBar gerenciar vários controladores (usando SDK 3.0). Uma delas é um controlador de tableView e eu preciso para fornecer uma capacidade de pesquisa usando o UISearchDisplayController. Todo o meu código é baseado no Apple TableSearch exemplo. No entanto, ao clicar na guia, o controlador tableView aparece mostrando o seu conteúdo relacionado, mas não SearchBar aparece. Fui verificar o xib em IB para se certificar de que todas as saídas estão devidamente configuradas, mas não importa o que eu tento self.searchDisplayController é sempre nula e a barra de pesquisa não aparece.

Na prática eu replicado MainView.xib do exemplo TableSearch e definir a classe proprietário do arquivo para a classe controlador correto para a guia. As saídas são conjuntos como no exemplo MainView.xib. Eu estou faltando qualquer passo importante ou fazendo algo errado?

Agradecemos antecipadamente.

Foi útil?

Solução 3

Ok, eu descobri como resolvê-lo. No meu caso, o problema foi devido ao fato de que eu estava usando um controlador embutido dentro do UITabBarController como um de seus guias gerenciados (isto é, como uma criança).

A remoção do controlador do UITabBarController, em seguida, adicionando um UINavigationController ao UITabBarController vez, e, finalmente, colocar o meu controlador como um filho do UINavigationController completamente resolvido o problema.

Eu não entendo por que isso acontece (não há informações relacionadas na documentação, como muitas vezes acontece); No entanto, ele agora trabalha como um encanto. Com os melhores cumprimentos.

Outras dicas

Eu tive o mesmo problema e passou a tropeçar em cima esta solução ...

Se você tem o seu controlador de exibição de tabela (ex. UISearchDisplayController) aninhado em um controlador Tab Bar ou navegação usando Interface Builder, você precisa definir o "Nome Nib" na janela "Atributos Inspector".

O nome Nib será aquele que detém a exibição de tabela e tem o controlador (por exemplo. UISearchDisplayController) como o dono do arquivo.

Eu também tenho esse problema :( É a barra de pesquisa se escondido atrás do tableview?

@unforgiven, se você tentar fazer isso ...?

searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)]; 
[self.tableView setTableHeaderView: searchBar];

Esta manualmente cria um searchbar e ele funciona. Mas eu estou fazendo algum erro estúpido em IB que o SearchBar não aparecer mesmo que minhas ligações são perfeitos. : - (

Do atualizar este post se você obter a resposta ...

Eu tive um problema semelhante

Para resolver eu tive que fazer um passo adicional para resposta unforgivens Na minha nib principal

1) criar um UITabController 2) Em seguida, arrastada para fora de um controlador UINavigational para o controlador de guia 3) Em seguida, arrastou uma UITableViewController no NavigationalController como uma criança 4) Em seguida, mudou (3) classe para ser meu MyTableWithSearchBarViewController no Inspetor - Verifique se o nome nib é correto e altere esta se necessário, no inspetor bem 5) Então eu tive que excluir o tableView que é automaticamente criado por IB no passo (3). Só então a busca show bar corretamente ...

Se no passo 3 I arrastado para fora um controlador diferente para o palco ou para a esquerda o tableView lá seria sempre apenas exibir a tabela e não a barra de pesquisa

estranho

Tomtrapeze tem a resposta certa se seu arquivo nib contém o UITableViewController. Mas, se você estiver carregando o UITableViewController em código - como empurrando-o na pilha de um UINavigationController - a solução é um pouco diferente.

Quando inicializar o UITableViewController ou subclasse, você precisa usar o -initWithNibName: Pacote: forma de inicializador e especificar o nome do seu arquivo nib. Alternativamente, você poderia usar o -initWithStyle padrão:. Initializer e definir manualmente a propriedade nibName antes da visão é carregado

Se a propriedade nibName não está definido quando a vista é carregado, UITableViewController não vai usar a lógica de pesquisa UIViewController nib normal. Ela só vai carregar um UITableView padrão em vez.

Eu aprendi recentemente que eu poderia carregar arquivos NIB com [[MyViewController alloc] initWithNibName:nil bundle:nil]; quando o arquivo NIB tem o mesmo nome que a classe (ou seja MyViewController.xib). Acontece que a inicialização desta forma faz com que o 'UISearchBarandUISearchBarDisplayController` para não exibir. Quando eu inicializado o controlador de vista por realmente digitando o nome da classe, a minha barra de pesquisa mostrou-se corretamente. Inicialmente eu pensei que tinha algo a ver com a forma como eu estava apresentando o controlador de vista, mas estava feliz que ela não era.

PGWSearchViewController *searchVC = [[PGWSearchViewController alloc] initWithNibName:@"PGWSearchViewController" bundle:nil];

searchVC.modalPresentationStyle = UIModalPresentationFullScreen;
searchVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentViewController:searchVC animated:YES completion:^{ }];

Isso é usar iOS SDK 5.1 e XCode 4.3.1.

Outra correção possível que funciona para mim é para inicializar o UITableViewController com initWithNibName: Pacote:

SearchEntryTableViewController* searchEntryTableViewController = [[SearchEntryTableViewController alloc]initWithNibName:@"SearchEntryTableViewController" bundle:nil];

Para o ninho UITableViewController em um UINavigationController antes de colocá-lo em um UITabBarController não corrigir o problema para mim ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top