自定义Apples MultipleDetailViews示例的几个问题

时间:2011-04-15 16:14:46

标签: iphone ios4 ipad

我一直在尝试将此示例添加/实现到我现有的Split View应用程序测试中。

Apple Example

我使用替换详细视图或右视图的概念,否则我的应用程序会有所不同。正是这种差异导致了我的问题。

我有一个rootviewcontroller或左视图,在这里选择一些东西时,新视图会被推到这个视图上。在这个“推动视图”中选择某些东西后,我想要更改细节视图或右侧视图。这与apple示例有所不同,其中rootview没有推送视图,因此引用不会被破坏。

以下是我的更改代码 - 正在初始化新的View DVCases,但未执行didload。

问题是与我的课程有关的学习问题。

  1. 下面的代码在我的RootViewController实现代码中,但是如果推送了一个新视图,我对splitviewcontroller的引用就不起作用了。

  2. 第二个self.navigationcontroller不正确,因为我已将第二个视图推送到rootviewcontroller。

  3. 为了集中和简化代码,我所做的是来自didselect事件中被推送视图的委托,我调用在rootviewcontroller中找到的方法,将索引作为参数传递。我的自定义方法的代码包含以下内容。

    所以我的问题是如何在我将其他视图推送到rootview或左侧的情况下执行此操作。看来,在推送视图后,对splitviewcontroller的引用已经消失,self.navigationcontroller也消失了。

    UIViewController <SubstitutableDetailViewController> *detailViewController = nil;
    
    if (value == 0) {
        DVCases *newDetailViewController = [[DVCases alloc] initWithNibName:@"DVCases" bundle:nil];
        detailViewController = newDetailViewController;
    }
    
    // Update the split view controller's view controllers array.
    NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil];
    splitViewController.viewControllers = viewControllers;
    [viewControllers release];
    
    // Dismiss the popover if it's present.
    if (popoverController != nil) {
        [popoverController dismissPopoverAnimated:YES];
    }
    
    // Configure the new view controller's popover button (after the view has been displayed and its toolbar/navigation bar has been created).
    if (rootPopoverButtonItem != nil) {
        [detailViewController showRootPopoverButtonItem:self.rootPopoverButtonItem];
    }
    
    [detailViewController release];
    

    如果您有任何提示或帮助,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

初始化任何viewcontroller类并不意味着它会调用viewDidLoad方法。

只有在加载viewDidLoad的视图时,才会调用

viewController方法。通常我们通过以下方法来实现。

1. Pushing it on navigation stack.
2. Presenting it using modal transition.
3. Adding it on some other view using [someView addSubView:controller.view];
4. Selecting any tabBar item for the first time Or tapping tabBar Item twice.
there may be some other scenarios.

但是现在你的代码中我没有看到任何这个元素。

初始化意味着你正在调用初始化的直接方法(调用它的构造函数),就像上面的代码initWithNibName中一样,DVClass将调用此方法而不是任何其他方法(直到此方法调用其他方法)在里面)。

由于

答案 1 :(得分:0)

当我正在学习正确编码时 - 我的问题就在于此。

只要您使用相同的实例调用它,上述代码就是完美的。我不是。因此它没有用。

最后,我将RootViewController作为具有上述代码的方法的委托。因此,当在另一个视图中时 - 此视图可以调用此方法,并且RootViewController的正确或实际实例将实现它。