为故事板View Controller设置“自定义类”或者为UIViewController创建子类并创建它的实例有何不同?

时间:2014-03-08 16:24:24

标签: ios objective-c

我刚创建了一个简单的Master-Detail应用程序(SplitViewController)。

如果我创建一个新文件 - Objective-C类,其名称为MYCustomSplitViewController,则从UISplitViewController继承/继承,我可以做两件事:

  1. 进入Main.Storyboard,选择Split View Controller并将Identity Inspector中的“Custom Class”设置为“MYCustomUISplitViewController”
    • 现在,当加载拆分视图控制器时,我在MYCustomSplitViewController -viewDidLoad方法中获得了“点击”。
  2. 在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并将Identity Inspector中的“Custom Class”设置为“none” - 默认为“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如何成为屏幕上实例的“自定义类”?

1 个答案:

答案 0 :(得分:1)

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

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

这让您感到困惑,因为这是UISplitViewController的一个实例。要让实际的课程注销NSLog(@"%@", splitViewController.class)。如果您更改了xib中的自定义类,则注销的类应该是您在xib中设置的自定义类