gpt4 book ai didi

ios - 参数化 UIView 类属性不显示 View

转载 作者:行者123 更新时间:2023-11-29 11:01:26 25 4
gpt4 key购买 nike

我试图在我的 viewController 类中显示一个 UIView。我从 viewController 中的 viewDidLoad 方法调用 initCard 方法。第一个功能有效,但第二个功能无效。在函数的第二个版本中,我试图显示的 View 没有显示,但程序的其余部分正常运行。我做错了什么?

viewDidLoad 的方法调用,有效:

[self initCard];

- (void) initCard {
[[NSBundle mainBundle] loadNibNamed:@"Card1View_iPhone" owner:self options:nil];
[self.view addSubview:self.card1ContainerView];
self.card1ImageView.image = [UIImage imageNamed:@"b1fv.png"];
CGRect sFrame = CGRectMake(100, 100,
self.card1ContainerView.frame.size.width,
self.card1ContainerView.frame.size.height);
self.card1ContainerView.frame = sFrame;
}

viewDidLoad 的方法调用不起作用:

[self initCard:self.card1ContainerView cardImageView:self.card1ImageView];

- (void) initCard: (UIView*)cardContainerView cardImageView:(UIImageView*)cardImageView {
[[NSBundle mainBundle] loadNibNamed:@"Card1View_iPhone" owner:self options:nil];
[self.view addSubview:cardContainerView];
cardImageView.image = [UIImage imageNamed:@"b1fv.png"];
CGRect sFrame = CGRectMake(100, 100,
cardContainerView.frame.size.width,
cardContainerView.frame.size.height);
cardContainerView.frame = sFrame;
}

最佳答案

因为 self.card1ContainerView 是在卡片 View Nib 中连接的 IBOutlet,在您调用第二个示例时它还没有连接,因为您只加载方法本身的 Nib 。因此,您将 nil 作为参数传递给该方法。在该方法中加载 nib 会将 self.card1ContainerView 设置为您可能感兴趣的 View ,但此时为时已晚 - 该方法继续使用传递给它的 nil 值.方法参数按值传递,因此即使您更改了调用时传递的指针,该方法仍会使用它在调用时复制的值。因此,您要在 View 层次结构中添加一个 nil View ,它什么也不做。

如果您需要参数化容器 View 参数,请从方法调用中删除 nib 加载步骤,然后确保在使用参数 self.card1ContainerView 调用它之前已加载 nib:

- (void)setupCard {
[[NSBundle mainBundle] loadNibNamed:@"Card1View_iPhone" owner:self options:nil];
[self setupCard:self.card1ContainerView imageView:self.card1ImageView];
}

- (void) setupCard: (UIView*)cardContainerView cardImageView:(UIImageView*)cardImageView {
[self.view addSubview:cardContainerView];
cardImageView.image = [UIImage imageNamed:@"b1fv.png"];
CGRect sFrame = CGRectMake(100, 100,
cardContainerView.frame.size.width,
cardContainerView.frame.size.height);
cardContainerView.frame = sFrame;
}

我将名称从 init... 更改为 setup... 因为以 init 开头的方法在大多数 Objective 中都有特定的作用-C 框架。

请注意,您必须确保不将 nil 参数传递给参数化方法,无论是通过在调用之前加载 nib 还是通过在代码中实例化 View 并将它们传递给方法。这就是新的 setupCard 方法的作用。

关于ios - 参数化 UIView 类属性不显示 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15726935/

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