Динамически изменять представление UIViewController в iOS 7

У меня есть 2 класса пользовательского вида ( CustomView_A, CustomView_B ), полученных из UIView . У меня есть UIViewController который должен иметь возможность переключаться между представлениями во время выполнения.

Что до сих пор, я сделал это .. в раскадровке, я использую класс CustomView_A как класс вида.

 @interface MyViewController: UIViewController @property (nonatomic, weak) CustomView_A *customView_A; 

Теперь у меня есть второй класс CustomView_B и я хочу изменить представление представления MyViewController на CustomView_B во время выполнения.

Как я могу это сделать? Заранее спасибо..

хорошо, вот код, как вы хотите –

в вашем MyViewController.h put –

 @property (nonatomic, retain) CustomView_A *customView_A; @property (nonatomic, retain) CustomView_B *customView_B; -(void)switchView; // to switch the views. 

в вашем MyViewController.m put –

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.customView_A = [[CustomView_A alloc]initWithFrame:self.view.frame]; self.customView_A.backgroundColor = [UIColor redColor]; UIButton *trigger = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // Just take this button so that your switchView methods will get called on click of this method. [trigger setFrame:CGRectMake(10, 10, 50, 30)]; [trigger setTitle:@"Click" forState:UIControlStateNormal]; [trigger addTarget:self action:@selector(switchView) forControlEvents:UIControlEventTouchUpInside]; [self.customView_A addSubview:trigger]; [self.view addSubview:self.customView_A]; self.customView_B = [[CustomView_B alloc]initWithFrame:self.view.frame]; self.customView_B.backgroundColor = [UIColor yellowColor]; self.customView_B.hidden = YES; [self.view addSubview:self.customView_B]; } - (void)switchView { [UIView animateWithDuration:10 delay:10 options:UIViewAnimationOptionCurveEaseInOut animations:^{ self.customView_A.hidden = YES; self.customView_B.hidden = NO; } completion:nil]; } 

Если вы снова хотите переключить виды, сделайте противоположное.

Не. То, что вы описываете, является существенным непониманием UIViewController. Когда экземпляр UIViewController имеет view , это его view навсегда.

Если вам нужны два разных вида, то либо:

  • Используйте два контроллера вида (например, вы можете представить контроллер представления B и его вид сверху контроллера A и его вид с использованием модального сегмента) или

  • Сделайте хотя бы одно из этих представлений не принадлежащим контроллеру вида: просто разместите это представление перед другим видом и затем удалите его снова, по желанию.

Попробуй это:

 - (IBAction)changeView { if (self.customView_A.hidden == YES) { self.customView_A.hidden = NO; self.customView_B.hidden = YES; //You should use a UIView animation here to do this. } else { self.customView_A.hidden = YES; self.customView_B.hidden = NO; //Same here ) } 

В вашем viewDidLoad добавьте представление в CGRectZero

 - (void)viewDidLoad { self.customView_A = [[CustomView_A alloc]initWithFrame:CGRectZero]; [self.view addSubview:self.customView_A]; //do the same with the other custom view } 

Извините, если код немного неисправен, я не использовал Xcode для его ввода.