【问题标题】:Perform UIAlertView before performing segue在执行 segue 之前执行 UIAlertView
【发布时间】:2014-06-10 05:10:08
【问题描述】:

当我从 View Controller A 转到 View Controller 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 语句。感谢任何建议。

【问题讨论】:

    标签: ios objective-c uialertview segue


    【解决方案1】:

    一种方法是像这样修改您的流程:让 ViewControllerA 成为您正在显示的 UIAlertView 的委托,然后使用 alertView Delegate 调用来执行转场。你可以这样做:

    首先在Storyboard中的2个ViewControllers之间做一个segue,我称之为ViewController2:

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

    #import "ViewController.h"
    
    @interface ViewController () <UIAlertViewDelegate>
    

    在 tableView 的 didSelect 方法中创建一个 alertView(使用 delegate: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
        }
    }
    

    我不喜欢分段教程或解释,所以这里是全部内容:

    【讨论】:

    • 感谢您的详细解释。有效。我之前面临的问题是我从表格视图单元到新的视图控制器有转场
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多