MoreNavigationController 的背景图片
Posted
技术标签:
【中文标题】MoreNavigationController 的背景图片【英文标题】:Background image for MoreNavigationController 【发布时间】:2010-08-23 07:55:46 【问题描述】:我想在我的 UITabBarController moreNavigationController 中的 tableView 后面放置一个图像。在第一次设置 TabBar 时,我尝试过像这样插入子视图:
UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background3.png"]];
[self.tabBarController.moreNavigationController.topViewController.view insertSubview:imageView atIndex:0];
但这会将图像放在顶部,大概是因为 tableView 当时不存在。是否有更好的时间调用它以使其正常工作,或者更简单的方法?
【问题讨论】:
moreNavigationController 是什么? 当您有超过 5 个选项卡时,处理 UITabBarController 的“更多”选项卡的视图控制器。见这里:developer.apple.com/iphone/library/documentation/uikit/… 【参考方案1】:在this question 的帮助下,我想出了如何做到这一点。基本上,moreNavigationController中的viewController是一个单独的TableView,所以添加背景图片是行不通的。我需要做的是创建一个新视图,添加背景图像,然后在其上添加 moreNavigationController 视图。我通过在 UITabBarController 的子类中覆盖 viewDidLoad 来做到这一点,但我希望它也可以在其他地方完成。
- (void)viewDidLoad
[super viewDidLoad];
UINavigationController *moreController = self.moreNavigationController;
if ([moreController.topViewController.view isKindOfClass:[UITableView class]])
UIView* newView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,367)];
UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background3.png"]];
imageView.opaque = NO;
imageView.alpha = 0.4;
[newView addSubview:imageView];
moreController.topViewController.view.backgroundColor = [UIColor clearColor];
moreController.topViewController.view.frame = CGRectMake(0,0,320,367);
[newView addSubview:moreController.topViewController.view];
moreController.topViewController.view = newView;
你可能在帧大小等方面更聪明,但这对我有用。希望它也对其他人有所帮助。
【讨论】:
【参考方案2】:现在您可以从 UITableView 子类访问 backgroundView 属性。
UIViewController *moreViewController = tabBarController.moreNavigationController.topViewController;
img = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"BG_MORE+1.png"]];
//Got some crashs in initialization !! Need to check .
if ([moreViewController.view isKindOfClass:[UITableView class]])
UITableView *moreTableView = (UITableView*)moreViewController.view;
[moreTableView setBackgroundView:img];
【讨论】:
【参考方案3】:除了这里乱七八糟的东西,你可以使用 UIView 的 bringSubviewToFront: 和 sendSubviewToBack: 来组织你的子视图。基本上这应该会有所帮助,尽管如果您有更多的子视图,则需要稍微尝试一下:
[self.tabBarController.moreNavigationController.topViewController.view addSubview:imageView];
[self.tabBarController.moreNavigationController.topViewController.view pushSubviewToBack:imageView];
//or [self.tabBarController.moreNavigationController.topViewController.view bringSubviewToFront:tableView];
【讨论】:
我认为您的意思是“sendSubviewToBack”,恐怕这没有任何区别。我认为是因为在我调用代码时(在 applicationDidFinishLaunching 结束时),控制器尚未设置?以上是关于MoreNavigationController 的背景图片的主要内容,如果未能解决你的问题,请参考以下文章
MoreNavigationController 的背景图片
moreNavigationController 暂时不显示图像
从 UITabBarController 的 moreNavigationController 中移除 rightBarButtonItem