2013-02-28 75 views
0

我想创建一个自定义的UIView并将其加载到xib文件中。自定义的UIView被称为JtView这里是代码:自定义UIView和loadNibNamed不工作

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    NSLog(@"initWithFrame was called"); // this was called 
    if (self) { 
     // Initialization code 
     [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:NULL]; 
     [self addSubview:self.view]; 
    } 
    return self; 
} 

-(void)awakeFromNib 
{ 
    [super awakeFromNib]; 
    [self addSubview:self.view]; 
} 

在创建厦门国际银行文件(文件 - >新建 - >文件 - >用户界面 - >查看),我删除了主窗口,并拖了从Xcode的对象调色板查看。我试着拖动到JtView的头部,但这不起作用。我需要在这里创建一个关联,还是应该离开XCode创建的地方? (编辑 - 请参阅下面的评论以作进一步说明)

我还在xib中添加了UILabel。

但是,当我在模拟器中运行并将背景颜色设置为红色时,标签不显示。我是否需要在自定义UIView中创建UILabel作为参考?我应该删除这个还是放置它? enter image description here

THX

编辑1 这里是连接的屏幕截图,头文件:

+0

请CH eck文件的视图在nib文件中的所有者。你必须提到JtView代替文件所有者的观点在笔尖 – 2013-02-28 18:21:05

+0

所以是的,我已经调整,并没有删除主'窗口'。我已将文件的所有者连接到View,但标签仍未显示。 – timpone 2013-02-28 18:37:33

+0

好的。如果你还没有解决你的问题,请参考http://stackoverflow.com/questions/15144482/custom-uiview-iboutlet-not-set/15154855#15154855这可能会有所帮助。如有任何问题,请回复我。谢谢 – 2013-03-01 09:55:49

回答

-1

试试这个:

-(void)awakeFromNib { 
    NSArray *obj = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]; 
    [self addSubview:obj[0]]; 
} 

或者,如果你有一个@property IBOutlet中名为“ nibview“你可以这样做:

-(void)awakeFromNib { 
    [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]; 
    [self addSubview:self.nibview]; 
} 
+0

这段代码给了我一个崩溃,说'EXC_BAD_ACCESS(code = 2)'! – 2014-07-07 07:28:02

+0

你试过了哪个版本? – jsd 2014-07-07 17:11:22

+0

XCode - 5.1(B) iOS - 7.1 – 2014-07-08 04:18:49

1

我解决它添加一个类的方法来UIView的:


+ (id)customView; 

+ (id)customView 
{ 
    CustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:nil options:nil] lastObject]; 

    // make sure customView is not nil or the wrong class! 
    if ([customView isKindOfClass:[CustomView class]]) 
     return customView; 
    else 
     return nil; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    CustomView *customView = [CustomView customView]; 
    //And where you gonna use it add this line: 
    //this self.view refers to any view (scrollView, cellView...) 
    [self.view addSubview:customView]; 
} 

我希望it's要去帮助