iOS:使用 xib 的自定义视图
Posted
技术标签:
【中文标题】iOS:使用 xib 的自定义视图【英文标题】:iOS: Custom view with xib 【发布时间】:2013-09-21 00:07:33 【问题描述】:我错过了一些重要的事情。不完全确定它是什么。
我有一个自定义视图子类。我创建了一个 xib 文件来设计它的布局。我将四个按钮作为插座连接到班级。
#import <UIKit/UIKit.h>
@interface MCQView : UIView
@property (strong, nonatomic) IBOutlet UIButton *btn1;
@property (strong, nonatomic) IBOutlet UIButton *btn2;
@property (strong, nonatomic) IBOutlet UIButton *btn3;
@property (strong, nonatomic) IBOutlet UIButton *btn4;
然后我有
#import "MCQView.h"
@implementation MCQView
@synthesize btn1,btn2,btn3,btn4;
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
[self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil] objectAtIndex:0]];
NSLog(@"%@", btn1);
return self;
然后我通过initWithFrame
将视图添加到另一个视图控制器。
当我尝试记录 btn1 以查看它是否存在时,它会打印 null。我认为这是因为我还没有初始化它,但我不确定该怎么做,考虑到如果我将它创建为一个新按钮,那么 xib 中的所有东西都将毫无用处?
【问题讨论】:
【参考方案1】:编辑回复:
哦,等等,您正在尝试在您的班级中初始化视图?不要那样做。
在 Interface Builder 中,将 MCQview.xib 的 Class 设置为 MCQView 以自动创建连接。连接所有按钮(如果您还没有的话)。
之后,您将能够根据需要自动编辑属性。
原始回复
我是凭记忆做的,但我认为你应该这样做:
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil];
UIView *view = [[UIView alloc] init]; // or if it exists, MCQView *view = [[MCQView alloc] init];
view = (UIView *)[nib objectAtIndex:0]; // or if it exists, (MCQView *)[nib objectAtIndex:0];
[self.view addSubview:view];
【讨论】:
我不太明白。然后如何从另一个视图控制器实例化该视图?使用自定义 xib。 要在另一个视图控制器中实例化视图,请使用 Original Response 标头下的代码。 啊,那行得通。如何初始化自定义视图? 你到底想初始化什么?要设置视图属性的信息,只需通过它们的访问器方法调用它们。例如,[view.btn1 addTarget...]
为什么要创建这个“UIView *view = [[UIView alloc] init];”【参考方案2】:
这应该很简单:
view = [[[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil] objectAtIndex:0]
【讨论】:
【参考方案3】:对于斯威夫特 (2):
var nib = NSBundle.mainBundle().loadNibNamed("MCQView", owner: self, options: nil)
view : MCQView = nib[0] as! MCQView
self.view.addSubview(view)
【讨论】:
【参考方案4】:您是对的,您不需要使用 XIB 初始化按钮。尝试使用 initWithNibName 而不是 loadNibNamed。
【讨论】:
UIView 不响应 initWithNibName: 是的,我认为那是视图控制器以上是关于iOS:使用 xib 的自定义视图的主要内容,如果未能解决你的问题,请参考以下文章