在我的视图控制器的初始化中,我声明了一个视图,并将其设置为主视图的子视图:
self.customView = [[UIView alloc] initWithFrame:self.view.frame];
self.customView.backgroundColor = [UIColor redColor];
[self.view addSubview:self.customView];
稍后,在一个方法中,我需要将self.customView
替换为另一个视图。 (注意:更改背景颜色只是一个简单的例子。视图比这更复杂。)
UIView *anotherView = [[UIView alloc] initWithFrame:self.view.frame];
anotherView.backgroundColor = [UIColor blackColor];
self.customView = anotherView;
但这没有效果。但是,如果我改为:
[self.view addSubview:anotherView];
工作正常。但是,我希望摆脱以前的视图,而无需显式地本地化和删除视图。是不是可以在运行时替换子视图或者我错过了什么?
我与ARC合作。谢谢!
答案 0 :(得分:4)
我认为最适合您的解决方案是将自定义setter写入@property customView:
标题中的:
@property (nonatomic, strong) UIView* customView;
in impelementation:
@synthesize customView = _customView;
...
-(void) setCustomView:(UIView *)customView {
NSUInteger z = NSNotFound;
if (_customView) {
z = [self.view.subviews indexOfObject:_customView];
}
if (z == NSNotFound) {
// old view was not in hierarchy
// you can insert subview at any index and any view you want by default
[self.view addSubview:customView];
} else {
// you can save superview
UIVIew *superview = _customView.superview;
[_customView removeFromSuperview];
//also you can copy some attributes of old view:
//customView.center = _customView.center
[superview insertSubview:customView atIndex:z];
}
// and save ivar
_customView = customView;
}
因此您无需将customView添加为子视图。 此外,您还可以随时替换customView
答案 1 :(得分:2)
您需要删除旧视图并添加新视图。像这样:
// Remove old customView
[self.customView removeFromSuperview];
// Add new customView
UIView *anotherView = [[UIView alloc] initWithFrame:self.view.frame];
anotherView.backgroundColor = [UIColor blackColor];
self.customView = anotherView;
[self.view addSubview:self.customView];
编辑:
我甚至没有注意到你所做的只是改变背景颜色。在这种情况下,根本不需要替换视图。只需更新背景颜色:
self.customView.backgroundColor = [UIColor blackColor];
答案 2 :(得分:0)
而不是删除旧版本并添加新版本,您可以更改旧版本的颜色,这将更加优化,而不是创建/删除视图。
您可以通过以下代码更改已添加的视图的颜色
self.customView.backgroundColor = [UIColor blackColor];
答案 3 :(得分:0)
您分享的示例代码我觉得这不是正确的代码方式。请遵循示例代码。
初始化视图并设置隐藏属性
self.customView = [[UIView alloc] initWithFrame:self.view.frame];
self.customView.backgroundColor = [UIColor redColor];
[self.view addSubview:self.customView];
self.customView.hidden = YES;
UIView *anotherView = [[UIView alloc] initWithFrame:self.view.frame];
anotherView.backgroundColor = [UIColor blackColor];
[self.view addSubview:anotherView];
anotherView.hidden = YES;
在运行时通过
选择所需的视图self.customView.hidden = NO;
anotherView.hidden = YES;
如果你需要self.customView来显示
和
anotherView.hidden = NO;
self.customView.hidden = YES;
如果您需要另一个View来显示