1

以下是我要实现的内容:

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

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

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

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

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

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

4

2 回答 2

0

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

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

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
于 2009-05-31T07:19:54.087 回答
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会调用委托方法,以便通知您的主视图发生了某些事情,并且它可以将正确的视图推送到位,甚至跳转到正确的类别。

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

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

于 2009-05-31T19:05:07.390 回答