2010-09-22 98 views
0

我有一个视图控制器交换UIView对象进出。可能有数百种不同的观点,每种观点都有自己的行为。我是否需要为每个UIVIew创建变量并链接IBOutlet?

在我目前的MainWindow.xib文件我目前有:

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 

的AppDelegate中声明窗口和的viewController。这很基本。

MainViewController.h

#import <UIKit/UIKit.h> 


@class TableOfContents, Page1; 

@interface MainViewController : UIViewController { 

    TableOfContents *tableOfContents; 
    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]; 
} 

相应的UIView类是目前非常裸露的,所以我会从他们张贴避免。

现在funcGoToPage只是提出tableOfContents。最终,我会根据点击的内容将它放到不同的地方。

当前,每个页面都设置为IBOutlet,并从MainViewController链接到Interface Builder中相应的UIView。通过这种方式,每个页面都必须设置为一个变量并链接到IB,创建变量,插座和连接的hubub。

我的问题是:有没有办法在运行中创建这些连接,这样我就可以使用我的funcGoToPage函数进行交换,而无需将它们设置为IBOutlet?

回答

4

当一个笔尖被加载时,它的所有内容都被加载。如果你在一个笔尖上有很多的意见,你会很快耗尽内存。

我会把每个页面放在一个单独的笔尖上,然后在需要时加载笔尖: [[NSBundle mainBundle] loadNibNamed:@“nibNameWithoutExtension”owner:self options:nil];

对于这项工作:

  • 添加IBOutlet,如newPage,到任何self
  • 设置文件所有者的nibNameWithoutExtension到任何self
  • 加入视图nibNameWithoutExtension到文件所有者的newPage插座
+0

当笔尖加载时,它也加载所有在各种UIViews中引用的图像和对象?就像如果每个视图包含高质量图像,那么所有这些图像都会一次加载到内存中? – emachine 2010-09-22 15:51:56

+0

是的,在实例化笔尖时,加载的任何笔尖引用都会加载。 – 2010-09-22 17:42:13

+0

有趣的是,我正在考虑你的建议并改用单独的笔尖。谢谢。 – emachine 2010-09-22 18:08:45

相关问题