开发者

Do I need to create variables and link IBOutlet for every UIVIew?

I have a View Controller that is swapping UIView objects in and out. There is the potential to have hundreds of different views, each with their own behaviors.

Within my current MainWindow.xib file I currently have:

File's Owner     UIApplication
First Responder  UIResponder
AppDelegate      AppDelegate
  -Cover         Cover
Window           UIWindow
Table of Contents  TableOfContents
page1            Page1
page2            Page2
page...n         Page...n

The AppDelegate declares the window and the viewController. It's pretty basic.

MainViewController.h

#import <UIKit/UIKit.h>


@class TableOfContents, Page1;

@interface MainViewController : UIViewController {

    TableOfContents *tableOfConten开发者_Go百科ts;
    Page1 *page1;
    Page2 *page2;
    Page...n *page...n;
}

@property (nonatomic, retain) IBOutlet TableOfContents *tableOfContents;
@property (nonatomic, retain) IBOutlet Page1             *page1;
@property (nonatomic, retain) IBOutlet Page2             *page2;
@property (nonatomic, retain) IBOutlet Page...n          *page...n;

-(IBAction)funcGoToPage:(id)sender;

@end

MainViewController.m

#import "MainViewController.h"
#import "TableOfContents.h"
#import "Cover.h"
#import "Page1.h"
#import "Page2.h"
#import "Page...n.h"

@implementation MainViewController

@synthesize page1, page2, page...n tableOfContents;
@synthesize pageID, pagesPathFile, pagesPath;


-(IBAction)funcGoToPage:(id)sender{

    //[[self view] removeFromSuperview];
    [self.view addSubview:self.tableOfContents];
}

The corresponding UIView classes are pretty bare at the moment so I'll refrain from posting them.

Right now funcGoToPage is just bringing up tableOfContents. Eventually I'll have it go different places depending on what was clicked.

Currently each page is set up as an IBOutlet and linked from the MainViewController to the appropriate UIView in Interface Builder. Done this way each page will have to be set up as a variable and linked to in IB creating a hubub of variables, outlets and connections.

My question is: Is there a way to create these connections on the fly so that I can swap them in using my funcGoToPage function without setting them up as an IBOutlet?


When a nib is loaded all of its content is loaded. If you have lots of views in one nib you'll quickly run out of memory.

I would put each page in a seperate nib and then load the nib when required: [[NSBundle mainBundle] loadNibNamed:@"nibNameWithoutExtension" owner:self options:nil];

For this to work:

  • add an IBOutlet, eg newPage, to whatever self refers to
  • set the File Owner in nibNameWithoutExtension to whatever self refers to
  • join the view in nibNameWithoutExtension to the newPage outlet of File Owner
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜