objective-c - 使用没有 View Controller 的 NIB 文件创建自定义 UIVIew

标签 objective-c uiview xib nib

我为此苦苦挣扎了几个小时: 我想创建一个从 NIB 文件加载的自定义 UIView。这就是我所做的:

1) 我创建了一个类和一个名为“MyView”的 NIB 文件。

2)我把类作为文件的所有者自定义类。

3)为了加载NIB文件,我知道我需要这段代码,但我不确定把它放在哪里。我把它放在“init”方法中。

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

    self = [nib objectAtIndex:0];

4) 使用此自定义 View :使用 IB,我在主 ViewController 中创建了一个 UIView。在自定义类的 View 属性中,我放置了“MyView”。我为此 View 创建了一个名为“myView”的 IBOutlet,并将其连接到 ViewController 类。

5) 现在我不确定我是否需要调用“init”或者它是否自动完成,因为它在 NIB 文件中。我试过他们两个。 无论如何,“myView”类类型被识别为 UIView 而不是 MyView,并且显示的是空 View 。

我做错了什么?还有其他方法吗?

谢谢, 宁录


编辑:我根据此处的答案更改了我的代码。这里的所有答案实际上都没有使用自定义类,这就是这里的全部想法。这是我所做的,但是应用程序崩溃了,因为它认为 testView 是 UIView 而不是 TestView。请帮忙。

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic,retain) TestView *testView;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSArray* views=[[NSBundle mainBundle] loadNibNamed:@"TestView" owner:nil options:nil];
    self.testView= [views objectAtIndex:0];
    [self.view addSubview:self.testView]; 
    [self.testView trace]; // calling a method from the custom class
}

最佳答案

试试这个

if ((self = [super initWithCoder:aDecoder])) {
        if ((self = [super initWithCoder:aDecoder])) {
           NSArray * nib = [[NSBundle mainBundle]
                     loadNibNamed: @"MyView"
                     owner: self
                     options: nil];
          [self addSubview:nib[0]];
        }
        return self;
    }

关于objective-c - 使用没有 View Controller 的 NIB 文件创建自定义 UIVIew,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14560207/

相关文章:

ios - 在基类或扩展 Swift 的静态方法中获取派生类型的类型名称

ios - UIBarButtonItem 在启用后不会更改默认蓝色

ios - Xcode 让我使用临时变量...?

iOS 7 自定义 TableView 在 TabBar 下

iphone - 隐藏标签栏项目并对齐其他标签项目

ios - 如何初始化添加到 Objective C 中的 .xib 的 UITableView?

ios - 单击一个 View Controller 中的按钮将在另一个 View Controller 中推进进度条

ios - 在 UILabel et.al 中使用 NSString 子类

objective-c - 沿二次曲线对 View 的中心点进行动画处理

uiview - UIView 标签属性的最大值