gpt4 book ai didi

objective-c - 将自定义 subview (在 xib 中创建)添加到 View Controller 的 View - 我在做什么错

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

我在 xib 中创建了一个 View (带有事件指示器、进度 View 和标签)。然后我创建了 .h/.m 文件:

#import <UIKit/UIKit.h>

@interface MyCustomView : UIView {
IBOutlet UIActivityIndicatorView *actIndicator;
IBOutlet UIProgressView *progressBar;
IBOutlet UILabel *statusMsg;
}

@end

#import "MyCustomView.h"

@implementation MyCustomView

- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
// Initialization code
}
return self;
}

- (void)dealloc {
[super dealloc];
}

@end

在 IB 中,我将文件的所有者和 View 标识设置为 MyCustomView,并将 IBOutlet 连接到文件的所有者

在 MyViewController.m 中,我:

- (void)viewDidLoad {

[super viewDidLoad];

UIView *subView = [[MyCustomView alloc] initWithFrame:myTableView.frame];
[subView setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]];

[myTableView addSubview:subView];
[subView release];
}

当我运行应用程序时,添加了 View ,但我看不到标签、进度条和事件指示器。

我做错了什么?

最佳答案

您需要使用 -loadNibNamed 方法加载它。 -initWithNibName 仅适用于 UIViewControllers。

将以下代码添加到您的 MyCustomView 初始化方法中:

NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil];
UIView *mainView = [subviewArray objectAtIndex:0];
[self addSubview:mainView];

记住,如果你从一个 nib 初始化一个对象,它会调用 - (id)initWithCoder:(NSCoder *)aDecoder 来初始化,所以如果你正在创建你必须重写它 Nib 内的 MyCustomView 对象。如果你只是用 initWithFrame: 来做,那么只需覆盖它并添加上面的代码。此外,在您的 nib 中,确保您有一个顶级 UIView,并在其中放置所有其他元素(确保您的 subviewArray 只有一个条目)。

这将从 Nib 加载 View 并将它们添加到对象中,并且应该可以解决问题。

关于objective-c - 将自定义 subview (在 xib 中创建)添加到 View Controller 的 View - 我在做什么错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5354653/

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