2013-09-21 45 views
0

在我的主要的viewController,我有这样的:如何初始化一个UIView

// .h 
#import "YNSlidingMenu.h" 

@interface YNAddNoteViewController : UIViewController 
@property (nonatomic, strong) YNSlidingMenu *slidingMenu; 
@end 

// .m 
- (void)setUpSlidingMenu{ 
    _slidingMenu = [[YNSlidingMenu alloc]init]; 
    [self.view addSubview:_slidingMenu]; 
} 

在YNSlidingMenu.m,我有这样的:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self configureView]; 
    } 

    return self; 
} 

- (id)init{ 
    self = [super init]; 
    if (self) { 
     NSLog(@"init"); 
    } 

    return self; 
} 

- (void)configureView{ 
    NSLog(@"configureView"); 
    self.rect = CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, 40); 
} 

YNSlidingMenu将根据获得其框架本身的内容,所以我不想在我的viewController上用initWithFrame进行初始化。

我需要做什么? NSLog(@"init");不会被调用。我如何初始化我的自定义视图,而无需从我的viewController设置框架?

+1

“ - setUpSlidingMenu”是否从某处被调用? – theMikeSwan

+0

是的,viewDidLoad。 –

+0

在YNSlidingMenu的'initWithFrame:'添加一个断点或NSLog()'来查看它是否被调用,如果是的话,框架是什么。你应该在视图控制器的'setUpSlidingMenu'中做同样的事情,以确保它被调用。 – theMikeSwan

回答

0

我不认为它可以得到它的框架基于其内容,除非因为你使用自动布局。 正确的做法是,您初始化时使用CGRectZero进行查看。然后在准备好后设置框架。 或者你可以采用自动布局。

+0

我做了,它的工作。但是,我不知道为什么这种方法似乎有点肮脏,国际海事组织。 –

+0

我只是从来没有在非自动布局代码中看到它,但基本上它与'initWithFrame:CGRectZero'一样......猜测'UIView'中有一些函数转发。 –

0

当初始化视图时,将[self configureView]从initWithFrame:方法移出init方法,作为调用init。至少这就是你的示例代码的样子。

+0

我做了,但它仍然没有被调用。 –

+0

你的控制器在哪里调用setUpSlidingView? – ArtSabintsev

+0

viewDidLoad,在我的主视图控制器上。 –