导航视图控制器问题

时间:2009-05-31 06:31:36

标签: iphone navigation controller

以下是我要实施的内容:

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

您可以通过将一个屏幕与另一个屏幕稍微分离来实现此目的:

- 为类别创建模式对话框创建自定义委托和协议。简单的事情:

@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时,会调用委托方法,以便通知主视图已发生某些事情,并且可以将正确的视图推送到位,甚至跳转到正确的类别。

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

- 通常,使用委托/协议来实现push navcontroller和模态对话框是一种非常方便的模式,用于创建分离和可重用的视图。通过这种方式,可以从各种地方调用它们。为了使其一致,您可能还希望在每个模式对话框上使用show方法,并推送调用者可以调用的视图控制器。通过这种方式,可以采用一致的方式获得用户完成通知的一致方式。