2013-09-21 93 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,在我的主視圖控制器上。 –