What I would do is:
1) Create custom classes for each view.
2) Then I would set the View Classes to the classes that I created.
3) Then I would write the code to handle whatever functionality you need within these view classes.
@interface PageContent : UIView
- (void) showTest : (NSString *) textToShow;
@end
@implementation PageContent
- (void) showTest : (NSString *) textToShow
{
//Then here you would do whatever you need to do with this text, and display it
}
@end
@interface SoundPlayer : UIView
- (void) playSound;
@end
@implementation SoundPlayer
-(void) playSound
{
//Do whatever you need to do with the sound here.
}
@end
4) Then create outlets to each one of these views in your View Controller Class.
//So your View Controller Class would look something like this.
@interface YourViewController : UIViewController
@property (strong, nonatomic) IBOutlet Page *page;
@property (strong, nonatomic) IBOutlet PageContent *pageContent;
@property (strong, nonatomic) IBOutlet SoundPlayer *soundPlayer;
@end
5) Then in your View Controller @implementation you could do stuff like
@implementation YourViewController
-(void) showContent
{
[self.pageContent showText:@"Text To Show"];
}
-(void) playSound
{
[self.soundPlayer playSound];
}
@end
Now when you call these ([self showContent] or [self playSound]) methods in the view controller, it will call the methods for the specific views, so that way you don't have an extremely long non reusable view controller.
I just showed a view examples, I hope that you can see what I'm doing here, and implement this for everything that you need.