добавить фоновое изображение в UITableViewController в приложении на основе навигации

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

Вопрос

У меня есть приложение на основе навигации, в которое я помещаю UITableViewControllers в стек. Я хотел бы добавить фоновый UImage ко всем моим UITableViewControllers . Не UIColor , а UImage . Я знаю, как это сделать, используя файл Nib и сам установив для UITableView использование [UIColor ClearColor] , но я не хочу просмотреть все мои UITableViewControllers и изменить их на использование файлов Nib и т. д.

Я также нашел это решение , которое было бы замечательно, если бы в моем приложении был только один tableviewcontroller. Я думаю, что мог бы быть способ сделать эту работу, добавив подпредставление " ниже " мое табличное представление, которое создается по умолчанию в UITableViewController ?

Любые предложения будут отличными.

Это было полезно?

Решение

В приложении, основанном на навигации, это немного отличается: просто измените фон представления навигации, на котором находится каждое представление таблицы. Размещение следующего кода в viewDidLoad каждого UITableViewController работает:

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

Но вам может потребоваться сделать это только один раз, на верхнем уровне контроллера навигации, а не в каждом контроллере табличного представления (хотя вам все равно придется настроить каждый фон для очистки).

Другие советы

На iOS6 используйте это:

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

Если ваш класс является подклассом UIViewController, вы можете сделать это следующим образом:

[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];

Как сказал Горм

  

нужно сделать это только один раз, на верхнем уровне UINavigationController

Ответ на мой Madhup - правильный ответ. UITableViewController является подклассом UIViewController, поэтому добавление его в метод viewDidLoad вашего UITableViewController прекрасно работает.

Начиная с iOS 3.2, - [UITableView setBackgroundView:] существует, что может быть проще, чем другие предлагаемые решения в будущем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top