Qual é o caminho certo para adicionar uma barra de ferramentas para um UITableView?
-
21-08-2019 - |
Pergunta
Eu estou escrevendo um iPhone app de navegação baseado, e eu gostaria de ter um UIToolbar encaixado na parte inferior da tela do meu, com um UITableView rolagem entre a barra de ferramentas ea barra de navegação.
Eu vi um par de fóruns onde tem sido sugerido que o View Controller lidar com este ponto de vista deve ser um UIViewController padrão em vez de um UITableViewController. O controlador de exibição teria para implementar os métodos de delegado UITableView e de fontes de dados em adição a todas as substituições UIViewController padrão. O que (se houver) built-in funcionalidade que eu preciso para recriar na subclasse este controlador de vista diferente dos protocolos acima mencionados para tê-lo agir como um UITableViewController? Existe algo que eu estou perdendo por esse caminho?
Ou seria melhor para um ninho dentro UITableViewController de um UIViewController padrão?
Solução
A partir do OS 3.0 do controlador de navegação tem uma barra de ferramentas construída em fazer parecer:
[self.navigationController setToolbarHidden:NO];
Por implmenting:
- (void)setToolbarItems:(NSArray *)toolbarItems animated:(BOOL)animated
no seu controlador de vista, você pode configurar os itens da barra de ferramentas.
Assim, você não precisa mais se preocupar com onde a barra de ferramenta está localizada na sua hierarquia.
(erro de digitação corrigido)
Outras dicas
Corey Floyd é principalmente correta, exceto que
[self.navigationController setToolBarHidden:NO];
deve ser
[self.navigationController setToolbarHidden:NO];
Isto é, o "b" em "setToolbarHidden" deve ser minúsculas. Além disso, o nome do método listado na iPhone OS Referência é realmente
- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated
embora pareça que omitindo o parâmetro animated
funciona também.
//Tool bar
[self.navigationController setToolbarHidden:NO];
UIBarButtonItem *buttonItem = [[ UIBarButtonItem alloc ] initWithTitle: @"Select All"
style: UIBarButtonItemStyleBordered
target: self
action: @selector(selectAll:) ];
UIBarButtonItem *buttonNext = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStyleBordered target:self action:@selector(goNext:)];
self.toolbarItems = [ NSArray arrayWithObjects: buttonItem, buttonNext, nil ];
[ buttonItem release ];
[buttonNext release];
Tudo que você precisa fazer é implementar os métodos UITableViewDelegate e UITableViewDataSource necessários para o nível de funcionalidade vista de tabela que você necessita. Estes métodos podem ser em qualquer embora classe (s) disse classes devem estar de acordo com os protocolos pertinentes. O delegado e fonte de dados deve ser definido na instância UITableView - ou programaticamente ou com Interface Builder. De acordo com os documentos que você perder algumas funcionalidades - veja a visão geral seção .
Pessoalmente acho que muitos desenvolvedores parecem estar obcecado com o fornecimento de toda essa funcionalidade em uma única classe de controlador visão monolítica, e que porque eles têm uma visão de tabela em sua opinião, em seguida, deve ser utilizado uma subclasse de UITableViewController. No entanto, eu gostaria de considerar a único princípio Responsabilidade e muitas vezes vai quebrar a fonte de dados e delegado em separado aulas quando a complexidade é outra coisa senão simples. O código também não é então amarrado a uma implementação específica UIViewController.
Em situações onde eu tenho aulas de fonte de dados / Delegado separados muitas vezes eu construir e conectá-los até o ponto de vista tabela usando Interface Builder e não no código. Esta abordagem (para mim pelo menos) é no espírito de Dependency Injection e salva escrever algum caldeira código -plate, e fornece algum nível de dissociação .
Estas opções de prato são influenciados pela complexidade da funcionalidade que você está tentando alcançar -. Para implementações simples eu poderia me encontrar com UITableViewController
Tente esta:
self.navigationController.toolbarHidden = NO;
Espero que ajude você.