0

我有一个视图控制器,有 2 个不同的 segues 去 2 个不同的视图控制器,我必须在两个控制器中实现取消按钮。当我按下取消按钮时,在两个控制器中,视图将返回到初始视图控制器。我的问题是如何实现按钮?当我尝试使用此代码时,编译器警告:发现并忽略了方法“取消:”的多个声明。谢谢。

界面:

-(IBAction)cancel:(UIStoryboardSegue *)segue;    
-(IBAction)done:(UIStoryboardSegue *)segue;    
-(IBAction)cancel:(UIStoryboardSegue *)segue;

执行:

-(IBAction)done:(UIStoryboardSegue *)segue    
{
    if([[segue identifier] isEqualToString:@"ReturnInput"]){            
        AddSightingViewController *addController = [segue sourceViewController];            
        if (addController.birdSighting) {

            [self.dataController
             addBirdSightingWithSighting:addController.birdSighting];

            [[self tableView]reloadData];                
        }            
        [self dismissViewControllerAnimated:YES completion:NULL];
    }
}


-(IBAction)cancel:(UIStoryboardSegue *)segue    
{        
    if([[segue identifier] isEqualToString:@"CancelInput"]){            
        [self dismissViewControllerAnimated:YES completion:NULL];            
    }
}
4

3 回答 3

0

从您的代码中,我得出结论,您正在使用(或想要使用)退出 segues 来取消。

首先,在初始视图控制器中,您的取消方法应该只有一个方法声明和实现。在您的故事板中,通过从取消按钮拖动到绿色退出图标来创建退出 segues,吹动视图控制器并选择初始视图控制器中定义的取消方法。对两个视图控制器都这样做。您还应该在情节提要中为您的出口转场提供不同的标识符(您需要在文档大纲中选择转场以更改其标识符)。

然后您在初始视图控制器中的取消方法可能如下所示:

-(IBAction)cancel:(UIStoryboardSegue *)segue    
{
    if([[segue identifier] isEqualToString:@"CancelInput1"]) {
        // Do something
    } else if([[segue identifier] isEqualToString:@"CancelInput2"]) {
        // Do something different
    }
}

如果您在取消时不想做任何事情,只需将该方法留空即可。

于 2013-02-22T18:23:35.583 回答
0

如果您不想返回,则需要实施 unwind segue。

为此,请定义一种方法以返回原始视图控制器(您要返回的那个)。您可以将该方法留空。

- (IBAction)methodName:(UIStoryboardSegue *)segue
{
}

然后在 IB ctrl + 从按钮(或视图控制器)拖动到绿色的“退出”图标。从弹出菜单中选择methodName。如果您从视图控制器执行此操作,请在 segue 上设置标识符并使​​用 performSegueWithIdentifier: 从按钮操作调用它。

注意事项:

  • 将在情节提要的每个视图控制器中检测方法名称。

  • 你可以在不同的视图控制器中定义相同的方法名,但是当你执行 unwind segue 时,你会回到导航路径上最近的一个。

于 2013-04-04T09:44:57.917 回答
0

我不确定你想做什么。但我认为取消方法需要在 2 个子视图控制器中,而不是在主视图控制器中。每个控制器一个(每个视图一个取消按钮)。这样你就不会对方法的多个声明有任何问题。

于 2013-02-22T18:09:07.537 回答