在segue中实现2取消按钮

时间:2013-02-22 18:00:29

标签: ios

我有一个视图控制器有2个不同的segue到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];            
    }
}

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

然后你的初始视图控制器中的取消方法看起来像这样:

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

如果您在取消时不想做任何事情,请将方法留空。

答案 2 :(得分:0)

如果你不想回去,你需要实现一个解除偏见。

要执行此操作,请定义一个方法以返回原始视图控制器(您要返回的控制器)。您可以将方法留空。

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

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

考虑:

  • 将在故事板上的每个视图控制器中检测方法名称。

  • 您可以在不同的视图控制器中定义相同的方法名称,但是当您执行展开segue时,您将返回导航路径中的最新名称。