Если вы хотите сделать это в коде, вот пример, который я только что исполнил, используя лениво загруженные элементы пользовательского интерфейса. Я делаю здесь только одну кнопку и меняю ее между любыми активными видами. Это немного неловко, но уменьшает количество кода, необходимого для демонстрации этого.
Я создал два UIViews для представления ваших пользовательских классов, один с синим фоном и один с красным. Кнопка переключается между двумя. Если у вас уже есть уникальная кнопка в каждом из ваших пользовательских представлений, вам просто нужно предоставить эти кнопки как свойства ваших подклассов UIView, чтобы ваш контроллер представления мог получить к ним доступ, или добавить контроллер представления в качестве цели для действия кнопки изнутри код загрузки вашего UIView.
Я тестировал этот код в моем симуляторе, и он, кажется, работает нормально, но вы действительно должны попытаться понять, что здесь происходит, чтобы вы могли реализовать его самостоятельно.
ToggleViewController.h:
#import <UIKit/UIKit.h>
@interface ToggleViewController : UIViewController {
UIView *firstView;
UIView *secondView;
UIButton *button;
}
- (void)addButton;
- (void)toggleViews;
@property (nonatomic, readonly) UIView* firstView;
@property (nonatomic, readonly) UIView* secondView;
@property (nonatomic, readonly) UIButton* button;
@end
ToggleViewController.m:
#import "ToggleViewController.h"
@implementation ToggleViewController
// assign view to view controller
- (void)loadView {
self.view = self.firstView;
}
// make sure button is added when view is shown
- (void)viewWillAppear:(BOOL)animated {
[self addButton];
}
// add the button to the center of the view
- (void)addButton {
[self.view addSubview:self.button];
button.frame = CGRectMake(0,0,150,44);
button.center = self.view.center;
}
// to toggle views, remove button from old view, swap views, then add button again
- (void)toggleViews {
[self.button removeFromSuperview];
self.view = (self.view == self.firstView) ? self.secondView : self.firstView;
[self addButton];
}
// generate first view on access
- (UIView *)firstView {
if (firstView == nil) {
firstView = [[UIView alloc] initWithFrame:CGRectZero];
firstView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
firstView.backgroundColor = [UIColor redColor];
}
return firstView;
}
// generate second view on access
- (UIView *)secondView {
if (secondView == nil) {
secondView = [[UIView alloc] initWithFrame:CGRectZero];
secondView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
secondView.backgroundColor = [UIColor blueColor];
}
return secondView;
}
// generate button on access
- (UIButton *)button {
if (button == nil) {
// create button
button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
// set title
[button setTitle:@"Toggle Views"
forState:UIControlStateNormal];
// set self as a target for the "touch up inside" event of the button
[button addTarget:self
action:@selector(toggleViews)
forControlEvents:UIControlEventTouchUpInside];
}
return button;
}
// clean up
- (void)dealloc {
[button release];
[secondView release];
[firstView release];
[super dealloc];
}
@end