Ios 按顺序执行2取消按钮

Ios 按顺序执行2取消按钮,ios,Ios,我有一个视图控制器,它有两个不同的段,连接到两个不同的视图控制器,我必须在两个控制器中都执行“取消”按钮。当我按下“取消”按钮时,在两个控制器中,视图将返回到初始视图控制器。我的问题是如何实现按钮?当我尝试使用此代码时,编译器警告:找到并忽略了方法“cancel:”的多个声明。谢谢 接口: -(IBAction)cancel:(UIStoryboardSegue *)segue; -(IBAction)done:(UIStoryboardSegue *)segue; -(IBAc

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

接口:

-(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];            
    }
}

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

从您的代码中,我得出结论,您正在使用(或希望使用)退出序列来取消

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

然后,初始视图控制器中的cancel方法可以如下所示:

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

如果取消时不想执行任何操作,请将该方法留空。

如果不想返回,则需要执行一个“展开”序列

- (IBAction)methodName:(UIStoryboardSegue *)segue
{
}
要执行此操作,请定义一个方法以返回原始视图控制器(要返回的视图控制器)。您可以将该方法保留为空

- (IBAction)methodName:(UIStoryboardSegue *)segue
{
}
然后在IB上按住ctrl键并从按钮(或视图控制器)拖动到绿色的“退出”图标。从弹出菜单中选择methodName。如果是从视图控制器执行的,请在segue上设置标识符,并使用按钮操作中的PerformsgueWithIdentifier:调用它

考虑事项:

  • 将在序列图像板上的每个视图控制器中检测方法名称

  • 您可以在不同的视图控制器中定义相同的方法名称,但是当您执行“展开”序列时,您将返回到导航路径上最近的一个


单击“取消”按钮时,您是否需要执行额外的操作(如重置变量或调用其他方法),或者您只是想更改屏幕?如果确实需要更改其他内容,是否需要在初始视图或其他两个控制器之一上进行更改?查看您发布的代码,我猜您只是想更改屏幕,但我想确保。您的意思是在初始视图控制器中还是在其他两个视图控制器中的一个中?取消方法在初始视图控制器中,因为它是一个存在段。否,单击“取消”按钮时,我不需要执行额外的操作。您的方法正确,谢谢。