我希望有一个UITabBarController
,其alpha值为0.5,其透明度允许您在后台查看视图。背景视图必须是可访问和可更改的。
我可以使用这种技术添加背景:https://gist.github.com/1157542
这是一个Category
,它为UITabBarController
添加了一个子视图,并将子视图发送到后面。但是,因为它是一个类别,所以我不能将子视图作为属性。所以我无法真正访问它。
有没有办法让这个背景视图更灵活,更方便?例如,我可以从任何标签栏控制器的视图控制器轻松添加其他子视图?
答案 0 :(得分:1)
您应该subclass
UITabBarController
而不是类别。这将允许您更好地控制对象。这是一个子类的例子。
// MPCustomTabBar.h
@interface MPCustomTabBar : UITabBarController
- (void) setBackgroundImage:(UIImage *)image;
@end
// MPCustomTabBar.m
@interface MPCustomTabBar
- (void) setBackgroundImage:(UIImage *)image {
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,480)];
imageView.backgroundColor = [UIColor colorWithPatternImage:i];
[[self view] addSubview:imageView];
[[self view] sendSubviewToBack:imageView];
[[self view] setOpaque:NO];
[[self view] setBackgroundColor:[UIColor clearColor]];
[imageView release];
}
@end
现在,您可以执行所需的所有自定义,通过以下方式分配和初始化您的新子类:
MPCustomTabBar *bar = [[MPCustomTabBar alloc] init];
答案 1 :(得分:0)
我的问题的解决方案可能就是这个......
在我的AppDelegate中,就在[self.window makeKeyAndVisible];
self.theImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]];
[self.tabBarController.view insertSubview:self.theImage atIndex:0];
然后我可以在任何标签栏控制器的视图控制器中轻松更改此图像,例如:
AppDelegate *appDelegate= (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.theImage.image = [UIImage imageNamed:@"image2.png"];
..不需要任何类别。
答案 2 :(得分:0)
这对我有用:
通过将“色调”和“背景”设置为“清除颜色”和“不透明”为“否”,使TabBar透明(通过故事板或以编程方式)
黑色背景颜色实际上是窗口的颜色。将要用作背景的图像指定给窗口本身:
UIImage * i = [UIImage imageNamed:@“main_background.png”]; UIColor * c = [[UIColor alloc] initWithPatternImage:i]; [self.window setBackgroundColor:c];