0

在我的应用程序中,当用户单击按钮时,它会调用 prepareForSegue。应用程序需要检查状态,然后提示用户是否要覆盖或删除。问题是它在显示 UIActionSheet 之前加载了下一个视图控制器。如何在调用 prepareForSegue 之前强制 UIActionSheet 出现?这是我对 prepareForSegue 的逻辑;

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

    if ([[segue identifier] isEqualToString:@"mySegue"]) {

        //Check Logic removed for simplicity

        if ([myCheck count] > 0){


            UIActionSheet *actionSheet = [[UIActionSheet alloc]
                                          initWithTitle:@"Save?"
                                          delegate:self
                                          cancelButtonTitle:@"Delete"
                                          destructiveButtonTitle:@"Save"
                                          otherButtonTitles:nil];
            [actionSheet showFromToolbar:self.navigationController.toolbar];


        }

    }

}

这是行动表;

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == [actionSheet cancelButtonIndex])
{

    //Delete logic removed

    }else {
    //Save logic removed

}
}
4

3 回答 3

1

你将无法在 segue 中做到这一点。当您获得应该触发它的按钮索引时,您必须在您的操作表处理程序中手动加载视图控制器。这意味着现在触发 segue 的任何东西都必须断开连接并指向将创建并显示您的操作表的 IBAction。prepareForSegue 旨在允许您在显示目标视图控制器之前在其上设置参数。当您准备好准备Segue 时,segue 已经启动。那时,没有回头/取消/延迟segue的执行。

最好的祝福。

于 2012-06-01T20:11:37.430 回答
1

我发现可以从动作表执行 Segue,只要 Segue 来自 View 控制器并且这里的标识符是一个示例。

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == [actionSheet cancelButtonIndex]) return;

    if (buttonIndex == 0) {

        [self performSegueWithIdentifier:@"visitWeb" sender:self];


    }
    if (buttonIndex == 1) {
        if ([MFMailComposeViewController canSendMail])
        {

可能不是正确的方法,因为我有点新手,但对于我在 StoryBoard 上的模态视图控制器来说,它似乎可以解决问题

于 2012-12-29T20:54:56.627 回答
0

创建操作表是一个异步事件,不会阻塞 segue。您需要从您的操作表中触发 segue。

于 2012-06-01T21:38:58.270 回答