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 ответа:
Свойство, которое является 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?
Надеюсь, это поможет!