gpt4 book ai didi

objective-c - 在没有 UIViewController 的情况下加载 XIB 文件

转载 作者:太空狗 更新时间:2023-10-30 04:01:09 29 4
gpt4 key购买 nike

我想使用 Interface Builder 设计一个 UIView 和一些 subview (UIWebView、UIToolbar、一些 UIBarButtonItems、进度指示器等等),但我认为传统上没有必要这样做,使用UIViewController,使用 presentViewController:animated

于是,我创建了一个自定义类,.h文件代码如下:

@interface FileInteractionManager : NSObject {

}

@property (nonatomic, retain) IBOutlet UIView *fileView;
@property (nonatomic, retain) IBOutlet UIWebView *fileWebView;

@property (nonatomic, retain) IBOutlet UIBarButtonItem *printButton;
@property (nonatomic, retain) IBOutlet UIBarButtonItem *optionsButton;
@property (nonatomic, retain) IBOutlet UIBarButtonItem *doneButton;

我的.m文件如下:

@implementation FileInteractionManager

@synthesize fileView, fileWebView, doneButton, optionsButton, printButton;

-(id)init {

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"FileInteractionView" owner:self options:nil];

NSLog(@"Load success!");

return self;
}

最后,我创建了一个名为“FileInteractionView.xib”的独立 xib 文件,将文件的所有者更改为我在上面创建的自定义类,并连接了 IBOutlets。

当我在我的类上调用 init 方法时,我可以在调试器中看到我的所有 IBOutlet 对象都已正确实例化。

我的问题是:

  1. loadNibNamed:owner:options: 方法是加载我的独立 .xib 文件的正确方法吗?我不喜欢这个方法返回一个我没有用的数组(返回的顶级对象与我的变量 fileView 匹配,但我已经通过 Interface Builder 链接了它们)。

  2. 我解决问题的一般方法是否正确?我执行上述步骤是因为我想要一个简单的 UIView 对象,我可以将它添加到我现有的 UIViewController,而不是呈现和关闭一个全新的 UIViewController。

最佳答案

我使用了一些不同的方法。我创建了一个 UIView 的子类(即 MyCustomView),然后是带有 View UI 的 xib,并更改了刚刚定义的(主) View 类。在 xib 中,您可以将导出链接到自定义 View 本身(而不是文件所有者)。最后在类定义中我创建了一个这样的函数:

+ (id) newFromNib
{
NSArray *nibArray = [[UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil] instantiateWithOwner:nil options:nil];
return nibArray[0];
}

一些注意事项:1)这是一个类方法,你可以只对“NSStringFromClass([self class])”之类的东西使用“self”,但真正的对象是返回的变量2)这个例子假设 xib 具有相同的类名(通过 NSStringFromClass([self class]) 所以我可以复制粘贴它而不改变任何东西;))并且你的 View 是 xib 中定义的第一个(标准)。如果您在一个 xib 中存储了多个“主” View ,请选择正确的元素。

所以在我需要 MyCustomView 的地方我会做类似的事情:

MyCustomView* mycv = [MyCustomView newFromNib];

然后设置 frame/center 并添加到 superview...如果您有一个包含复杂 UI 元素的“库”并想通过 xib 设计它们然后在需要时添加,我认为这种方式非常有用。

关于objective-c - 在没有 UIViewController 的情况下加载 XIB 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15612463/

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