добавить фоновое изображение в UITableViewController в приложении на основе навигации - PullRequest
7 голосов
/ 29 ноября 2009

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

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

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

Ответы [ 6 ]

48 голосов
/ 01 декабря 2009

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

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

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

16 голосов
/ 27 сентября 2012

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

UIImageView *boxBackView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TextureBoxboard.jpg"]];
[self.tableView setBackgroundView:boxBackView];
2 голосов
/ 08 июня 2012
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

2 голосов
/ 30 ноября 2009

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

[self.view setBackgroundColor:
     [UIColor colorWithPatternImage:
      [UIImage imageWithContentsOfFile:
       [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:
        @"background.png"]]]];
1 голос
/ 08 августа 2012

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

1 голос
/ 28 января 2010

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

...