如何在细胞选择后直接显示UIAlert&在显示新的UIView之后结束它?

时间:2011-10-25 21:04:19

标签: iphone ios uiview uiviewcontroller uialertview

在我的iPhone应用程序中,如何创建一个UIAlert(或其他指示器),向用户突出显示数据正在加载,以便:

    用户在UITableViewController A和中选择一个单元格后立即启动
  1. 在实际显示UITableViewController B之后结束
  2. 我的粗略流程将是:

    • 控制器A.
      • 用户选择行
      • 警报启动
      • 为准备控制器B而加载的数据
    • 控制器B.
      • 在说viewDidLoad中关闭加载指示器

    需要找到一种方法来执行此操作,以便使用的“加载”指示符实际上立即显示在当前视图中...

1 个答案:

答案 0 :(得分:1)

我个人想要的方法是首先在头文件中分配一个警告:

UIAlertView *alert;

然后在tableView:didSelectRowAtIndexPath:方法中创建并显示提醒。

alert = [[UIAlertView alloc] init....];
[alert show];
// start the loading process for your data to push to the next view

然后要关闭视图,只需在viewWillDisappear:animated:方法中执行此操作,然后执行以下调用:

[alert dismissWithClickedButtonIndex:0 animated:YES];

这应确保在显示下一个视图之前解除警报。我希望这有帮助。如果您有任何疑问,我很乐意更详细地描述

编辑:为了从其他视图中解除警报,您必须创建一个方法来创建警报以关闭它,将标题导入到它所推送的视图中,从中查找父视图孩子,然后在你想要的时候解雇。我将在下面详细解释。首先,创建一个从父节点中删除视图的方法,我将其称为Parent

- (void)dismissAlert {
    [alert dismissAlertWithClickedButtonIndex:0 animated:YES];
}

在您推送的视图中,请务必将#import "Parent.h"放在实现文件的顶部。

现在只需查找视图并调用方法即可。您可以更改调用它的位置,但是出于示例目的,我只是在子文件的viewDidAppear:方法中启动计时器并从那里开始。

- (void)viewDidAppear:(BOOL)animated {
    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(dismiss) userInfo:nil repeats:NO];
}

然后创建dismiss方法

- (void)dismiss {
    // find the Parent view, which is most likely the top view in the navigation stack
    // self.parentViewController will be the navigationController
    // calling childViewControllers gets the navigation stack, so we get the view from there
    [(Parent *)[[self.parentViewController childViewControllers] objectAtIndex:0] dismissAlert];
}

我已经对此进行了测试,但它确实有效,所以希望它可以帮到你。您可以将时间间隔更改为令人愉悦的时间间隔。考虑到我不知道您的应用程序的层次结构,很难说父视图相对于Child的位置,但是如果上面的不是它,您可以找到它。