在执行segue之前执行UIAlertView

时间:2014-06-09 20:27:08

标签: ios objective-c uialertview segue

当我从查看控制器A 转到查看控制器B 时,如何在出现segue之前加载我的UIAlertView? UIAlertView似乎只是在下一个屏幕中加载......

我尝试在

中实现UIAlertView
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

部分,但我无法得到结果。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{


if ([[segue identifier] isEqualToString:@"report"])

{
    [self loadingData];

}{

                [self retrieveData];

                NSIndexPath *indexPath = [self.myTableView indexPathForSelectedRow];
                Company *currentStore = [arrayOfStore objectAtIndex:indexPath.row];


                ReportsViewController *destinationVC = [segue destinationViewController];
                destinationVC.name = name;

self loadingData是我的UIAlertView void语句。感谢任何建议。

3 个答案:

答案 0 :(得分:1)

不要马上调用你的segue。当用户操作发生时(在表视图中选择一行?),然后显示警报视图。将自己设置为警报的代表。调用警报视图委托的alertView:clickedButtonAtIndex:方法时,请确保用户单击了正确的按钮,然后使用performSegueWithIdentifier:sender:方法在代码中调用您的segue。

答案 1 :(得分:1)

一种方法是通过重新编写流程,如下所示:使ViewControllerA成为您正在显示的UIAlertView的委托,然后使用alertView Delegate调用来执行segue。你可以这样做:

首先在Storyboard中的2个ViewControllers 之间创建一个segue ,我将其称为toViewController2:

segue storyboard

现在转到ViewController 1的.m文件,使其成为UIViewController委托:

#import "ViewController.h"

@interface ViewController () <UIAlertViewDelegate>

在tableView的didSelect方法中创建一个alertView(带委托:self ):

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Loading" message:@"Please wait while loading" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil]; // build the alertview
    [alertView show]; // show the alertview
}

单击alertView上的按钮时,将调用performSegue:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    [self performSegueWithIdentifier:@"toViewController2" sender:nil]; // perform segue after cancelbutton was pressed on alertview
}

最后,在您的alertView:

之后调用performSegue方法
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"toViewController2"])
    {
        // Do stuff AFTER the alertview button is pressed
    }
}

我不是分段教程或解释的粉丝,所以这就是一起: all together

答案 2 :(得分:0)

有两种方法可以做到这一点 -

  1. 在您的方法prepareForSegue中 - 首先显示警告框,然后在用户点击“完成”或“确定”按钮时执行segue。

  2. 使用委托 - 将“self”作为警报视图的委托,当用户点击警报视图时,使用委托方法,该方法在您所在的视图控制器类中实现, call performWithSegue。