我有一个视图控制器有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];
}
}
答案 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时,您将返回导航路径中的最新名称。