使用ios5的UITableView外观UIAppearance工作不正常



我正试图为UINavigationController中加载的许多UITableView设置背景。我正在使用iOS 5中添加的外观代理,但它并没有像我预期的那样工作。

该应用程序使用UISplitViewController,主视图为UINavigationController。在其中,我有一个UITableViewController子类,名为PBMasterTableViewController。在我的AppDelegate中,我有以下内容:

    UIImageView *bgView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"menuBg.png"]] autorelease];
    [[UITableView appearanceWhenContainedIn:[PBMasterTableViewController_Ipad class], nil] setBackgroundView:bgView];

这运行得很好,并且我在拆分视图中的主菜单具有我想要的背景。

从这个主菜单中,当我选择相关行时,我会将其他3个UITableViewController子层推到导航控制器上。但是,我无法使用外观代理更改这些表的背景。我正在尝试以下操作:

    UIImageView *bgView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"menuBg.png"]] autorelease];
    [[UITableView appearanceWhenContainedIn:[PBTwitterTableViewController class], nil] setBackgroundView:bgView];

这也在appDelegate中,就在前面显示的代码下面,它可以工作(但是没有重复创建图像视图),但这根本没有任何作用!当我将PBTwitterTableViewController的一个实例推送到导航控制器上时,我只需获得一个没有背景更改的标准表视图。

我知道我可以简单地更改tableViewControllers中的背景视图,但我不希望在旋转到portait时,当菜单显示在splitViewControllerspopover中时,这些背景出现在那里,因此我尝试使用appearanceWhenContainedIn:

我也不想简单地将外观设置为包含在UISplitViewController中时的样子,因为在两个实例中,我有一个UITableView正在加载到详细信息部分,所以这会改变我不想要的外观。

在没有外观代理的情况下,有没有其他方法可以让我在弹出窗口中更改背景,或者有没有一种方法可以使用代理来实现这一点,或者我只是错过了一些愚蠢的东西?

感谢

编辑:

我刚刚尝试创建UINavigationController的一个子类,并尝试使用[[UITableView appearanceWhenContainedIn:[PBMenuNavigationController class], nil] setBackgroundView:bgView];,它对主菜单来说仍然很好,但对推送到堆栈上的任何其他UITableView来说都不好,所以我现在真的很困惑:(

OK对它进行了排序。只需在每个视图中进行排序,并检查父控制器是否不是我不想要的。无论如何都要感谢

最新更新