gpt4 book ai didi

objective-c - "File' s 自定义 XIB 的所有者

转载 作者:太空狗 更新时间:2023-10-30 03:42:27 26 4
gpt4 key购买 nike

如果我创建一个单独的 nib 文件并将其加载到我的 View Controller 中并将其分配给一个 ivar,如下所示:


self.loadingview=[[[NSBundle mainBundle] loadNibNamed:@"loading"owner:self options:nil] objectAtIndex:0];

是否可以为 Nib 上的任何东西创建 IBOutlets,比如事件指示器? File's Owner 会是 viewcontroller,即使 IB 不知道这一点,因为它是代码中的对象吗?

按照我的方式加载 Nib 是可以接受的做法吗?

也许更可接受的做法是同时创建一个 .h/.m,并将其用作 XIB 的类,在这种情况下,File's Owner 是新的自定义类;但是,当从自定义类创建 ivar 时,我仍然需要在我的 Controller 中使用上述方法,对吗?或者有没有更好的方法来完成这一切,而不使用 Controller 的 xib?

更新:根据一些答案,我做了以下操作。我摆脱了上面的 NSBundle 方法,而是这样做:

@property (nonatomic, retain) IBOutlet UIView*loadingview;

在该 View 的 nib 文件中,我单击文件所有者并将 自定义类 更改为我的 View Controller 。然后我从 File's Owner 按住 control 并拖动到 View,它链接起来很好。

此时我假设我的 Controller 中有一个 ivar,self.loadingview,它包含 nib 中的信息。然而事实并非如此。我删除了 NSBundle 方法,假设 Controller 现在将直接通过 IB socket 加载 Nib ,但 Nib 中的 View 没有显示,我无法在 Controller 中控制它。

我在删除 NSBundle 方法时也删除了它:

[self.view addSubview:self.loadingview];

我不清楚此时 View 实际显示的方式;如果是,它出现在 View 层次结构中的什么位置?也许这是其他观点的背后。我也试过这个:

[self.view bringSubviewToFront:self.loadingview];

但 View 不存在。为了找到它,我做了:

//[self.view bringSubviewToFront:self.loadingview];

NSLog(@"index: %i",[[self.view subviews]indexOfObject:self.loadingview]);

有和没有评论部分。我明白了:

索引:2147483647

最佳答案

仅仅因为您创建了一个 nib 并且在该 nib 内部连接了 File's Owner 上的 socket ,不会自动从您的 View Controller 加载该 nib。

您可以为此使用 UINib 类:

UINib* nib = [UINib nibWithNibName:@"loading" bundle:[NSBundle mainBundle]];
[nib instantiateWithOwner:self options:nil];

一旦你执行了 instantiateWithOwner:self,nib 将被加载并且 self 将被用作文件的所有者,nib 中的 View 将连接到你的loadingView 属性。

你仍然需要调用[self.view addSubview:self.loadingView]将其添加到屏幕。

关于objective-c - "File' s 自定义 XIB 的所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7191540/

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