gpt4 book ai didi

iphone - 将 .xibs 加载到 UIView 中

转载 作者:行者123 更新时间:2023-12-03 18:28:08 30 4
gpt4 key购买 nike

我有一个带有自己的 .xib 的 UIViewController,我想使用 UISegmentedControl 在屏幕的下半部分显示不同的信息。我在容器的 .xib 中创建了一个 UIView,并将其连接到容器的 UIViewController 中名为 detailView 的 UIView 属性。

然后,我在 IB 中创建了三个 .xib 文件,其中一个用于每个段需要在 detailView 区域中显示的 View 。

我现在陷入困境,因为我不知道如何将适当的 .xib 文件加载和卸载到 detailView 区域。这就是我现在的位置:

- (void)segmentValueChanged:(id)sender {
switch ([sender selectedSegmentIndex]) {
case 0:
// Unload whatever is in the detailView UIView and
// Load the AddressView.xib file into it
break;
case 1:
// Unload whatever is in the detailView UIView and
// Load the ContactsView.xib file into it
break;
case 2:
// Unload whatever is in the detailView UIView and
// Load the NotesView.xib file into it
break;
default:
break;
}
}

那么如何正确填充空白并卸载/加载detailView UIView?

谢谢!

--更新--

viewDidLoad 中的代码现在是: - (void)viewDidLoad { [ super viewDidLoad];

    // Set the default detailView to be address since the default selectedSegmentIndex is 0.
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"AddressView" owner:self options:nil];
// assuming the view is the only top-level object in the nib file (besides File's Owner and First Responder)
UIView *nibView = [nibObjects objectAtIndex:0];
self.detailView = nibView;

self.detailContainerView.autoresizesSubviews = YES;
[self.detailContainerView addSubview:self.detailView];

NSLog(@"self.view is %@", self.view);
NSLog(@"self.detailContainerView is %@",self.detailContainerView);
NSLog(@"self.detailView is %@", self.detailView);
}

调试器消息是:

self.view is UIView: 0x3a24d80; frame = (0 0; 320 460); autoresize = RM+BM; layer = CALayer: 0x3a35190
self.detailContainerView is UIView: 0x3a1aea0; frame = (20 57; 280 339); autoresize = W+H; layer = CALayer: 0x3a36b80
self.detailView is UIView: 0x3a24d80; frame = (0 0; 320 460); autoresize = RM+BM; layer = CALayer: 0x3a35190

谢谢!

最佳答案

使用 NSBundle 的 loadNibNamed:owner:options:。它返回 NIB 文件中所有顶级对象的数组,然后您可以将其分配给您的 ivars。如果需要区分数组中的多个对象,请在 IB 中为每个对象指定一个唯一的标记。

试试这个:

case 0:
[[NSBundle mainBundle] loadNibNamed:@"AddressView" owner:self options:nil];
break;
...

如果您已在Interface Builder中将 View Controller 指定为AddressView.xib的文件所有者,并将XIB中的 View 连接到 View Controller 的detailView导出,则 View 和self.detailView之间的连接应该就位在调用 loadNibNamed 之后(因为您将 self 指定为所有者)。

如果这不起作用,请尝试以下操作:

case 0:
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"AddressView" owner:self options:nil];
// assuming the view is the only top-level object in the nib file (besides File's Owner and First Responder)
UIView *nibView = [nibObjects objectAtIndex:0];
self.detailView = nibView;
break;
...

对 switch 语句中的所有情况执行相同的操作。如果您已将detailView声明为@property (retain),则self.detailView = ...赋值将负责释放任何以前加载的 View 。无需专门卸载 NIB 内容。

关于iphone - 将 .xibs 加载到 UIView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2120984/

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