我有一个名为baseView
的UIView
,在其中我有initWithFrame
,我在其中添加了一些其他视图,并做了一些自定义的东西.同一视图还有一个NIB文件.
现在我有一个名为AppController
的UIViewController
类,我想在其中将baseView
视图添加到AppController
视图的视图中,因此我正在执行以下操作:
self.view = baseView;
但问题是NIB文件无法加载.我如何确保定制的东西和NIB文件被加载/运行?
我有一个名为baseView
的UIView
,在其中我有initWithFrame
,我在其中添加了一些其他视图,并做了一些自定义的东西.同一视图还有一个NIB文件.
现在我有一个名为AppController
的UIViewController
类,我想在其中将baseView
视图添加到AppController
视图的视图中,因此我正在执行以下操作:
self.view = baseView;
但问题是NIB文件无法加载.我如何确保定制的东西和NIB文件被加载/运行?
您有很多 Select ,这取决于如何使用"baseView"类并将其集成到应用程序中.不清楚您打算如何使用这个类--作为UIViewController子类中的视图,或者作为一个可重用的模块化组件,意味着要在整个应用程序中多次实例化,以便在许多不同的视图控制器中使用.
如果您的视图应该是UIViewController子类中的唯一视图,那么Phonitive是正确的--将其与UIViewController子类.xib文件Bundle 在一起,并使用UIViewController的viewDidLoad进行最终初始化.
但是,如果您希望View类成为在不同视图控制器中多次重用的子组件,通过代码或包含在另一个控制器的.xib文件中进行集成,则需要同时实现initWithFrame:init方法和wakeFromNib来处理这两种情况.如果您的内部初始化总是包含来自.xib的一些对象,那么在initWithFrame中,您将需要手动加载.xib,以便支持想要通过代码创建小部件的"Customer"类.同样,如果.xib文件包含您的对象,那么您需要确保从wakeFromNib调用任何代码所需的finalization.
下面是一个示例,说明如何使用NIB中的UI设计创建一个UIView子类组件.
MyView.h:
@interface MyView : UIView
{
UIView *view;
UILabel *l;
}
@property (nonatomic, retain) IBOutlet UIView *view;
@property (nonatomic, retain) IBOutlet UILabel *l;
我的观点.m:
#import "MyView.h"
@implementation MyView
@synthesize l, view;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
// Initialization code.
//
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
return self;
}
- (void) awakeFromNib
{
[super awakeFromNib];
// commenters report the next line causes infinite recursion, so removing it
// [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
- (void) dealloc
{
[l release];
[view release];
[super dealloc];
}
以下是nib文件的外观(除非该文件的所有者需要更改为MyView类).
一定要将视图和标签输出连接到文件所有者.就这样!用于创建可重用UIView小部件的模板.
这种 struct 最巧妙的地方是,你可以把MyView对象的实例放在其他nib文件中,只需把UIView放在你想要的位置/大小,然后把identity inspector(CMD-4)中的类改成MyView,然后砰的一声,你就可以在你想要的任何视图中找到你的小部件的实例了!就像UIKit对象一样,您可以实现委托协议,以便使用小部件的对象可以收到有趣事件的通知,并可以提供数据显示在小部件中,以对其进行自定义.