为情节提要视图控制器设置"Custom class"或子类化 UIViewController 并创建其实例有什么不同?



i刚刚创建了一个简单的主详细信息应用程序(SplitViewController)。

如果我创建了一个新文件-Cobjective -C类,其中包括MyCustomSplitViewController子类别/从UisplitViewController继承,我可以做两件事:

  1. 进入Main.Storyboard,选择"拆分视图控制器",然后将其"自定义类"设置为身份检查器中的"自定义类"为" mycustomuisplitviewController"
    • 现在,当加载拆分视图控制器时,我会在mycustomsplitviewController -ViewDidload方法中获得"命中"。

在appdelegate.m中,我有这个,可以清楚地看到 *splitViewController是UisplitViewController的实例,而不是mycustomuisplitviewController。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
    splitViewController.delegate = (id)navigationController.topViewController;
    return YES;
}

或2。进入Main.Storyboard,选择" Split View Controller",然后在身份检查器中设置其"自定义类"为"无" - 默认为" UisplitviewController"

在AppDelegate.m中,我现在修改 *SplitViewController直接为mycustomuisplitviewController。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    MYCustomUISplitViewController *splitViewController = (MYCustomUISplitViewController *)self.window.rootViewController;
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
    splitViewController.delegate = (id)navigationController.topViewController;
    return YES;
}

在第二种情况下,我在myUisplitViewController的-ViewDidload中没有"命中"。

我不明白...在这种情况下,是MyUisplitViewController,仅用于创建实例 *SplitViewController,仅此而已?之后,它不再访问方法了吗?将"自定义类"字段留为空实际上是否将其与我看不到的某些UisplitViewController(Apple默认)?

如果是这样,在第一种情况下如何将"自定义类"与文件中的代码联系起来?当我明确创建mycustomuisplitviewController的实例时,UisplitViewController如何成为屏幕上实例的"自定义类"?

您在代码中使用的类型只是编译器所期望的变量的提示。在您的第一个示例中,您声明

UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;

您对此感到困惑,这意味着这是UISplitViewController的实例。要获得实际的类登录NSLog(@"%@", splitViewController.class)。如果您更改了XIB中的自定义类,则已登录的类应为您在xib

中设置的自定义类

最新更新