Qual é o caminho certo para adicionar uma barra de ferramentas para um UITableView?

StackOverflow https://stackoverflow.com/questions/1072604

  •  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?

Foi útil?

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ê.

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