这是我的代码:

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/

10-11 00:41