Pergunta

Eu tenho um aplicativo baseado em navegação onde eu pressiono UITableViewControllers na pilha. Eu gostaria de adicionar um fundo UImage Para todos os meus UITableViewControllers. Não a UIColor, mas um UImage. Eu sei como posso fazer isso usando um Nib arquivar e definir o UITableView próprio para ter uso [UIColor ClearColor], mas eu não quero passar por todos os meus UITableViewControllers e mude -os para usar Nib arquivos, etc.

Eu também encontrei esta solução O que seria ótimo se eu estivesse apenas usando um único TableViewController no meu aplicativo. Eu acho que pode haver uma maneira de fazer esse trabalho, adicionando uma subview "abaixo" minha visualização de tabela que é criada por padrão em um UITableViewController?

Quaisquer sugestões seriam ótimas.

Foi útil?

Solução

É um pouco diferente em um aplicativo baseado em navegação: basta alterar o fundo da visão de navegação em que cada visualização da tabela está sentada. Colocando o seguinte código em viewDidLoad de cada uabableViewController funciona:

self.navigationController.view.backgroundColor = 
[UIColor colorWithPatternImage:[UIImage imageNamed:@"myImage.png"]];
self.tableView.backgroundColor = [UIColor clearColor];

Mas você pode precisar fazer isso apenas uma vez, no nível superior do controlador de navegação, em vez de em cada controlador de tabela (embora você ainda precise definir cada plano de fundo para limpar).

Outras dicas

No iOS6, use isto:

UIImageView *boxBackView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TextureBoxboard.jpg"]];
[self.tableView setBackgroundView:boxBackView];

Se sua classe é uma subclasse UIViewController, você pode fazer assim:

[self.view setBackgroundColor:
     [UIColor colorWithPatternImage:
      [UIImage imageWithContentsOfFile:
       [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:
        @"background.png"]]]];
UIImageView *backgroundView = 
  [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]];
backgroundView.frame = CGRectMake(0, 
                                  0, 
                               self.navigationController.view.frame.size.width, 
                               self.navigationController.view.frame.size.height);
backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | 
                                  UIViewAutoresizingFlexibleHeight;
[self.navigationController.view insertSubview:backgroundView atIndex:0];
[backgroundView release];
self.tableView.backgroundColor = [UIColor clearColor];

Como Gorm disse

só precisa fazer isso uma vez, no nível superior do UINavigationController

A resposta dada ao meu madhup é a resposta correta. O UitableViewController é uma subclasse do UIViewController; portanto, adicionar isso ao seu método ViewDidload do seu uitableViewController funciona muito bem.

A partir do iOS 3.2, -[UABILDVIEWVIELTVIBLIGHTVIEL:] Existe, o que pode ser mais fácil do que algumas das outras soluções propostas daqui para frente.

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