ios-возможна ли" замена " UIViews?


Вот мой код:

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 возвращает массив CGRects, закодированных как NSValues, а registrar: - локальный метод.

Все настраивается правильно (я тщательно проверил это с помощью отладчика). Представление успешно создается, устанавливается и добавляется в словарь.

Тем не менее, я абсолютно никогда не получаю реальный экран, чтобы изменить. Я даже включил изменение цвета фона, чтобы проверить, нет ли каких-то проблем с кнопками. Ничего. Какое-нибудь предлагаемое решение этой проблемы?
2 2

2 ответа:

Свойство, которое является IBOutlet, не имеет внутренней связи с иерархией представлений-оно только позволяет заполнить это свойство из xib. Когда вы устанавливаете себя.Botones, вам нужно сделать что-то вроде следующего:

[self.Botones removeFromSuperview];
self.Botones = newValue;
[self.BotonesSuperview addSubview:self.Botones];

Если вы обновляете self.Botones во многих местах, и вы всегда хотите, чтобы изменения отражались на экране, вы можете добавить это в реализацию сеттера:

-(void)setBotones:(UIView*)newValue {
    if (newValue != _Botones) {
        [_Botones removeFromSuperview];
        _Botones = newValue;
        [self.BotonesSuperview addSubview:_Botones];
    }
}

Я рекомендую использовать uinavigation контроллер, который содержит эти два вида.

Вы можете ссылаться на эту ссылку обмен между UIViews в одном UIViewController

В принципе, вы создаете одно представление, удаляете subview для первого, а затем добавляете второе с помощью addSubview! [view1 removeFromSuperview];

[самость.вид addSubview: изображение2];

Другие справочные источники: простой и понятный способ переключения / обмена мнениями?

Как анимировать вид подкачки в приложении simple View для iPhone?

Надеюсь, это поможет!