簡體   English   中英

實現UIViewController類別

[英]Implementing a UIViewController category

我正在嘗試在MainContainerViewController上實現一個返回主實例的類別:

在我的.h中:

@interface UIViewController(MainViewExtension)
/** Convience method for getting access to the MainContainerViewController instance */
- (MainContainerViewController *)mainContainerExtension;
@end

在我的.m中

@implementation UIViewController(MainViewExtension)
- (MainContainerViewController *)mainContainerExtension
{
    return (MainContainerViewController *)self;
}
@end

因此,從某個外部視圖控制器中,我執行self.mainContainerExtension來訪問該實例,並且僅聲明了一個實例,但它沒有給我正確的實例。

NSLog(@"number of children:%i", [self.mainContainerExtension.childViewControllers count]);

即使應該為3,它也將返回0,所以我知道它沒有給我正確的結果。 我想念什么嗎?

編輯:我知道它沒有給我正確的實例的方式是因為在MainContainerViewControllerviewDidLoad中,我有這個:

- (void)viewDidLoad
{
    appDelegate.notesViewController=[[NotesViewController alloc] init];
    appDelegate.notesViewController.mainContainer=self;
    [self addChildViewController: appDelegate.notesViewController];
}

每個NotesViewController都具有MainContainerViewController類型的屬性,因此我始終可以從NotesViewControllers訪問MainContainerViewController 但是我剛剛了解了類別和擴展,我認為實現一個類別使我能夠從我所在的任何視圖訪問容器視圖可能會更容易,而不是在每個視圖控制器上都有一個屬性。 這是我的第一次,所以我確定我在類別實現方面做錯了,只是不確定它是什么。

我認為返回self的實例方法不會有用。 無論您在[someVC mainContainerExtension]上調用哪個對象,您都已經有了答案:這是someVC。

如果每個NotesViewController都為包含的VC提供一個屬性,那么您是否都設置了? 只要它在NotesVC標頭中是公開的:

MainContainerViewController *mainVC = [[MainContainerViewController] alloc] init ...];

// then, after the view loads
for (UIViewController *vc in mainVC.childViewControllers) {
  NSLog(@"%@", (NotesViewController *)vc.mainContainer);
}

還要注意,除非應用程序中只有一個NotesViewController,否則在appDelegate中分配的一個NotesViewController將被覆蓋。 appDelegate中的句柄將是最后分配的句柄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM