【发布时间】:2012-04-04 05:08:02
【问题描述】:
我正在尝试为加载在 UINavigationController 中的许多 UITableView 设置背景。我正在使用 iOS 5 中添加的外观代理,但它没有按我的预期工作。
应用程序使用 UISplitViewController,主视图是 UINavigationController。 在这里面,我有一个名为 PBMasterTableViewController 的 UITableViewController 子类。 在我的 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 本身中的背景视图,但是当菜单显示在 splitViewControllers 弹出窗口中时,我不希望这些背景在旋转到肖像时出现,因此我尝试使用 appearanceWhenContainedIn :
我也不想简单地将外观设置为包含在 UISplitViewController 中,因为在 2 个实例中,我有一个 UITableView 被加载到详细信息部分,所以这会改变那些我没有的外观想要。
是否有另一种方法可以在没有外观代理的情况下执行此操作,仍然可以让我在弹出窗口中更改背景,或者有没有一种方法可以使用代理进行此操作,或者我只是错过了一些东西傻吗?
谢谢
编辑:
我刚刚尝试创建 UINavigationController 的子类并尝试使用 [[UITableView appearanceWhenContainedIn:[PBMenuNavigationController class], nil] setBackgroundView:bgView];,这对于主菜单再次正常工作,但对于推送到堆栈上的任何其他 UITableView 都没有,所以我现在真的很难过 :(
【问题讨论】:
标签: ios5 uinavigationcontroller uitableview uiappearance