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

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

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

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


person hookjd    schedule 28.11.2009    source источник


Ответы (6)


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

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

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

person Gorm    schedule 01.12.2009
comment
Кроме того, мне понадобилась третья строка: self.view.backgroundColor = [UIColor clearColor]; - person pulkitsinghal; 17.05.2012
comment
Это не толкает фоновое изображение вниз к нижней части панели навигации, как это делает контроллер просмотра... - person zakdances; 23.05.2012
comment
Я использую это в своем tableVC: [self.tableView setBackgroundView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@background.jpg]]]; работает как шарм ;) - person raistlin; 06.09.2012
comment
Новый вопрос здесь: заголовок stackoverflow.com/questions/12520585/ - person Steve Moser; 21.09.2012
comment
@SteveMoser Я добавил решение для iOS к этому вопросу - person bitboxer; 27.09.2012

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

UIImageView *boxBackView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TextureBoxboard.jpg"]];
[self.tableView setBackgroundView:boxBackView];
person bitboxer    schedule 27.09.2012
comment
почему iOS6? @property(nonatomic, readwrite, retain) UIView *backgroundView NS_AVAILABLE_IOS(3_2); // the background view will be automatically resized to track the size of the table view. this will be placed as a subview of the table view behind all cells and headers/footers. default may be non-nil for some devices. - person Artem Shmatkov; 29.09.2012
comment
Да, я знаю. Но другое решение, упомянутое здесь, не работает на iOS6, и я думаю, что это решение содержало ошибки на ‹ 4. Я пробовал это раньше, но это не сработало. Не знаю, когда именно это было исправлено. - person bitboxer; 30.09.2012

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

[self.view setBackgroundColor:
     [UIColor colorWithPatternImage:
      [UIImage imageWithContentsOfFile:
       [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:
        @"background.png"]]]];
person Madhup Singh Yadav    schedule 30.11.2009
comment
Спасибо, но это на самом деле суть моего вопроса. Это не UIViewController — это UITableViewController. - person hookjd; 30.11.2009
comment
какой учебник вы имеете в виду? - person hookjd; 01.12.2009

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

person snuc    schedule 08.06.2012

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

person memmons    schedule 28.01.2010

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

person Rob Rix    schedule 08.08.2012