【问题标题】:Navigation view controller question导航视图控制器问题
【发布时间】:2009-05-31 06:31:36
【问题描述】:

下面是我想要实现的:

  1. 我的应用程序的主屏幕是一个 UITableView。表格视图中的每一行都是一个类别,当您点击该行中的详细披露按钮时,您可以在类别详细视图中看到该类别下的一堆项目。

  2. 现在在主屏幕中,我单击导航栏中的“+”按钮来创建一个新类别。 (新类别将成为表格视图中的新行)。然后该应用程序将我带到“添加类别”视图。 (我用的是presentModalViewController)

  3. 在“添加类别”视图中,我设置了一些内容,然后单击“保存”按钮关闭“添加类别”视图。 (我用了dismissModalViewControllerAnimated)

  4. 通常在我点击“保存”按钮后,应用程序会将我带回主视图,我会在表格中看到一个新行。

  5. 但这不是我想要的,我想要的是 - 在我单击“保存”按钮后,“添加类别”视图将被关闭但不会返回主视图。相反,我将看到新创建的类别的详细信息,以便我可以继续在此类别下添加项目。结果就像“我回到主视图,然后点击新创建的行(类别)的详细披露按钮”。

  6. 有谁知道如何实现这一点?谢谢!

【问题讨论】:

    标签: iphone navigation controller


    【解决方案1】:

    您可以通过将一个屏幕与另一个屏幕稍微分离来做到这一点:

    - 为您的类别创建模式对话框创建自定义委托和协议。像这样简单的东西:

    @protocol CategoryCreationProtocol
    - (void) categoryAddDone:(NSString *)category;
    - (void) categoryAddCancelled;
    @end
    ...
    
    @interface CategoryCreationDialog : UIViewController {
    ...
        id<NSObject, CategoryCreationProtocol> categoryDelegate;
    }
    
    @property (assign) id< CategoryCreationProtocol, NSObject> categoryDelegate;
    

    - 当用户点击“保存”按钮时,在模式对话框中,关闭视图控制器后,调用委托方法:

    if (categoryDelegate && [categoryDelegate 
            respondsToSelector:@selector(categoryAddDone:)])
                [categoryDelegate categoryAddDone:newCategory];
    

    另外,Cancel 按钮也有类似的东西。

    - 您的主控制器实现了categoryAddDone 方法并将自己设置为模态对话框的categoryDelegate

    - 在运行时,当用户点击Save 时,会调用委托方法,以便通知您的主视图发生了某些事情,它可以将正确的视图推送到位,甚至跳转到正确的类别。

    - 在您的情况下,一旦类别创建完成,主视图控制器就会收到通知,因此它可以释放类别创建对话框并将类别详细视图推送到堆栈中。用户看到模态对话框消失并直接滑入详细视图。

    - 一般来说,使用委托/协议来推送导航控制器和模式对话框是一种非常方便的模式,可以制作解耦和可重用的视图。这样他们就可以从不同的地方被调用。为了使其保持一致,您可能还希望在每个模式对话框和调用者可以调用的推送视图控制器上都有一个show 方法。这样,就有一种一致的方式进入,也有一种一致的方式可以通知用户已完成。

    【讨论】:

      【解决方案2】:

      如果您使用presentModalViewController 及其对应的dismissModalViewControllerAnimated,那么您将返回到您发出初始presentModalViewController 消息的视图控制器。

      相反,您可能希望将负责添加新类别的视图控制器推入堆栈,完成后,您只需将负责显示该类别所有项目的视图控制器推入堆栈即可。因此,您应该使用

      - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-25
        • 2021-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-11
        相关资源
        最近更新 更多