在基于导航的应用程序中将背景图像添加到UITableViewController

时间:2009-11-28 21:35:50

标签: iphone uinavigationcontroller uiimage uitableview

我有一个基于导航的应用程序,我将UITableViewControllers推入堆栈。我想为所有UImage添加背景UITableViewControllers。不是UIColor,而是UImage。我知道如何使用Nib文件并将UITableView本身设置为使用[UIColor ClearColor]来执行此操作,但我不想浏览所有UITableViewControllers和将它们更改为使用Nib个文件等。

我还发现this solution如果我在我的应用中只使用一个tableviewcontroller,这将是很棒的。我认为可能有一种方法可以通过在UITableViewController默认创建的我的表格视图“下方”添加子视图来实现此功能。

任何建议都会很棒。

6 个答案:

答案 0 :(得分:48)

基于导航的应用程序略有不同:只需更改每个表视图所在的导航视图的背景。将以下代码放在每个UITableViewController的viewDidLoad中:

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

但您可能只需要在导航控制器的顶层执行一次,而不是在每个tableview控制器中执行此操作(尽管您仍需要将每个背景设置为清除)。

答案 1 :(得分:16)

在iOS6上使用:

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

答案 2 :(得分:2)

如果您的类是UIViewController子类,那么您可以这样做:

[self.view setBackgroundColor:
     [UIColor colorWithPatternImage:
      [UIImage imageWithContentsOfFile:
       [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:
        @"background.png"]]]];

答案 3 :(得分:2)

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

正如Gorm所说

  

只需要在UINavigationController

的顶层执行一次

答案 4 :(得分:1)

给我Madhup的答案是正确的答案。 UITableViewController是UIViewController的子类,因此将它添加到UITableViewController的viewDidLoad方法效果很好。

答案 5 :(得分:1)

从iOS 3.2开始, - [UITableView setBackgroundView:]存在,这可能比其他一些提出的解决方案更容易。