为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

iOS
千万里不及你 2019-12-09 11:23:40
我有一个UIView电话baseView,在initWithFrame那儿我可以添加其他一些视图并做一些自定义的事情。同一视图还具有NIB文件。现在我有一个UIViewController名为的类AppController,我想在其中添加baseView视图到视图的AppController视图中,所以我这样做:self.view = baseView;但是问题是NIB文件没有被加载。如何确定自定义内容和NIB文件已加载/运行?
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超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对象一样,您可以实现委托协议,以便可以将使用小部件的对象通知有趣的事件,并可以提供要显示在小部件中的数据以对其进行自定义。


查看完整回答
反对 回复 2019-12-09
?
交互式爱情

TA贡献1712条经验 获得超3个赞

如果您具有带有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];

}


查看完整回答
反对 回复 2019-12-09
  • 3 回答
  • 0 关注
  • 503 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信