gpt4 book ai didi

iphone - 实现 UIViewController 类别

转载 作者:行者123 更新时间:2023-12-01 16:57:54 28 4
gpt4 key购买 nike

我正在尝试在返回主实例的 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

所以从一些外部 View Controller ,我执行 self.mainContainerExtension 来访问实例,并且只声明了一个实例,但它没有给我正确的实例。
NSLog(@"number of children:%i", [self.mainContainerExtension.childViewControllers count]);

即使它应该是 3,它也会返回 0,所以我知道它没有给我正确的结果。我错过了什么吗?

编辑:我知道它没有给我正确实例的方式是因为在 viewDidLoadMainContainerViewController , 我有这个:
- (void)viewDidLoad
{
appDelegate.notesViewController=[[NotesViewController alloc] init];
appDelegate.notesViewController.mainContainer=self;
[self addChildViewController: appDelegate.notesViewController];
}

每个 NotesViewController具有 MainContainerViewController 类型的属性,这样我总有办法访问 MainContainerViewController来自 NotesViewControllers .但是我刚刚了解了类别和扩展,我认为只实现一个类别可能更容易,让我可以从我所在的任何 View 访问容器 View ,而不是在每个 View Controller 上都有一个属性。这是我的第一次,所以我确定我的类别实现有问题,只是不确定它是什么。

最佳答案

我不认为返回 self 的实例方法有用。无论您将在什么对象上调用它:[someVC mainContainerExtension],您都已经有了答案:它是 someVC。

如果每个 NotesViewController 都有一个包含 VC 的属性,那么你不是都准备好了吗?只要它在 NotesVC header 中是公开的:

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

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

另请注意,除非应用程序中只有一个 NotesViewController,否则在 appDelegate 中分配的那个将被覆盖。 appDelegate 中的句柄将是最后一个分配的句柄。

关于iphone - 实现 UIViewController 类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9860807/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com