这是我的代码:
if([pantallas objectForKey:par]){
UIView *vista= [[UIView alloc] initWithFrame:self.Botones.frame];
vista.backgroundColor= [UIColor brownColor];
CGSize la= CGSizeMake(50,60);
int cuantos= [part2 count];
NSArray *arr= [COLGenerales tileN:cuantos RectsOfSize:la intoSpaceOf:vista.frame withMaxPerRow:5 spaceVertical:10 spaceHorizontal:10];
for(int j=0; j<cuantos; j++){
UIButton *bot= [[UIButton alloc] initWithFrame:[[arr objectAtIndex:j] CGRectValue]];
bot.tag=j;
bot.titleLabel.text=par;
bot.titleLabel.hidden=true;
bot.imageView.image = [UIImage imageNamed:[[part2 allKeys] objectAtIndex:j]];
[bot addTarget:self action:@selector(registrar:) forControlEvents:UIControlEventTouchDown];
[vista addSubview:bot];
}
[pantallas setObject:vista forKey:par];
self.Botones= vista;
}else{
self.Botones= [pantallas objectForKey:par];
}
Botones是一个嵌入到该类控制的视图中的简单视图(首先由Nib文件启动),COLGenerales的类方法返回一个编码为NSValues的CGRects数组,而registrar:是一种本地方法。
一切设置正确(我已经通过调试器进行了彻底检查)。该视图已成功创建,设置并添加到字典中。
但是,我绝对不会得到实际的屏幕更改。我什至包括了背景颜色更改,只是为了检查按钮是否存在某种问题。没有。有什么建议的解决方案吗?
最佳答案
属于IBOutlet的属性没有与视图层次结构的内部连接-仅使从xib填充该属性成为可能。设置self.Botones时,您需要执行以下操作:
[self.Botones removeFromSuperview];
self.Botones = newValue;
[self.BotonesSuperview addSubview:self.Botones];
如果您在许多地方更新
self.Botones
,并且始终希望更改在屏幕上反映出来,则可以将其添加到setter实现中:-(void)setBotones:(UIView*)newValue {
if (newValue != _Botones) {
[_Botones removeFromSuperview];
_Botones = newValue;
[self.BotonesSuperview addSubview:_Botones];
}
}
关于ios - ios-可以“交换” UIViews吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15796324/