猿问

UIView和initWithFrame以及一个NIB文件。如何获取NIB文件?

我有一个UIView电话baseView,在initWithFrame那儿我可以添加其他一些视图并做一些自定义的事情。同一视图还具有NIB文件。


现在我有一个UIViewController名为的类AppController,我想在其中添加baseView视图到视图的AppController视图中,所以我这样做:


self.view = baseView;但是问题是NIB文件没有被加载。如何确定自定义内容和NIB文件已加载/运行?


千万里不及你
浏览 504回答 3
3回答

手掌心

您有很多选择,具体取决于将如何使用“ baseView”类并将其集成到应用程序中。目前尚不清楚您打算如何使用该类-作为UIViewController子类中的视图,还是可重复使用的模块化组件,意味着在整个应用程序中实例化多次,以用于许多不同的视图控制器。如果您的视图是UIViewController子类中的唯一视图,那么Phonitive是正确的-将其与UIViewController子类.xib文件捆绑在一起,并使用UIViewController的viewDidLoad进行最终初始化。但是,如果您希望View类成为在不同的View Controller中多次重用的子组件,可以通过代码集成,也可以通过包含在其他控制器的.xib文件中进行集成,那么您需要同时实现initWithFrame:init方法和awakeFromNib,处理这两种情况。如果内部初始化总是包含来自.xib的某些对象,那么在initWithFrame中,您将需要手动加载.xib,以支持要通过代码创建窗口小部件的“客户”类。同样,如果.xib文件包含您的对象,则需要确保从awakeFromNib调用任何代码所需的终结处理。这是一个如何使用笔尖中的UI设计创建UIView子类组件的示例。MyView.h:@interface MyView : UIView{    UIView *view;    UILabel *l;}@property (nonatomic, retain) IBOutlet UIView *view;@property (nonatomic, retain) IBOutlet UILabel *l;MyView.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小部件的模板。关于此结构的真正好处是,您可以将MyView对象的实例放置在其他nib文件中,只需将UIView放置在所需的位置/大小,然后将身份检查器(CMD-4)中的类更改为MyView,繁荣发展,无论您想要什么视图,都可以看到小部件的实例!就像UIKit对象一样,您可以实现委托协议,以便可以将使用小部件的对象通知有趣的事件,并可以提供要显示在小部件中的数据以对其进行自定义。

交互式爱情

如果您具有带有xib文件的自定义UIView。- (id)initWithFrame:(CGRect)frame{   self = [super initWithFrame:frame];   id mainView;   if (self)   {       NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"HomeAllAdsView" owner:self options:nil];       mainView = [subviewArray objectAtIndex:0];       }   return mainView;}- (void) awakeFromNib{   [super awakeFromNib];}
随时随地看视频慕课网APP

相关分类

iOS
我要回答