gpt4 book ai didi

ios - UIView 和 initWithFrame 以及一个 NIB 文件。如何加载 NIB 文件?

转载 作者:IT老高 更新时间:2023-10-28 11:23:55 25 4
gpt4 key购买 nike

我有一个名为 baseViewUIView,其中我有一个 initWithFrame,我可以在其中添加一些其他 View 并执行一些自定义操作。同一个 View 也有一个 NIB 文件。

现在我有一个名为 AppControllerUIViewController 类,我想在其中将 baseView View 添加到 AppController 的 View 中 查看所以我这样做:

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

最佳答案

您有很多选择,具体取决于您的“baseView”类如何使用和集成到您的应用程序中。目前尚不清楚您打算如何使用此类 - 作为 UIViewController 子类中的 View ,或作为可重用的模块化组件意味着在整个应用程序中多次实例化,以用于许多不同的 View Controller 。

如果您的 View 是 UIViewController 子类中的唯一 View ,那么 Phonitive 是正确的 - 将其与 UIViewController 子类 .xib 文件捆绑在一起,并使用 UIViewController 的 viewDidLoad 进行最终初始化。

但是,如果您希望您的 View 类成为在不同 View Controller 中多次重用的子组件,通过代码或通过包含在另一个 Controller 的 .xib 文件中进行集成,那么您需要同时实现 initWithFrame: init 方法,和 awakeFromNib,处理这两种情况。如果您的内部初始化总是包含来自 .xib 的一些对象,那么在您的 initWithFrame 中,您需要手动加载您的 .xib 以支持希望通过代码创建小部件的“客户”类。同样,如果 .xib 文件包含您的对象,那么您需要确保从 awakeFromNib 调用任何代码所需的终结。

这里是一个示例,说明如何使用 nib 中的 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 类)。

enter image description here

确保将 View 和标 checkout 口都连接到文件的所有者。而已!用于创建可重用 UIView 小部件的模板。

这种结构的真正巧妙之处在于,您可以将 MyView 对象的实例放置在其他 nib 文件中,只需将 UIView 放置在您想要的位置/大小,然后在身份检查器中更改类 (CMD-4)到 MyView,然后繁荣,你在任何你想要的 View 中都有一个你的小部件实例!就像 UIKit 对象一样,您可以实现委托(delegate)协议(protocol),以便使用您的小部件的对象可以收到有趣事件的通知,并可以提供数据以在小部件中显示以对其进行自定义。

关于ios - UIView 和 initWithFrame 以及一个 NIB 文件。如何加载 NIB 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5056219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com