2014-05-01 85 views
2

我正在Xamarin Studio(所以它是C#)中开发一个应用程序,它具有多个表格TextField s,我想验证在segue之前的整个屏幕到下一个屏幕被执行。它与下面的代码工作单击该按钮时:检查验证并执行segue vs应执行segue

saveButton.Clicked += delegate(object sender, EventArgs e) { 

    if(ValidateScreen()){ 
     PerformSegue("nextScreen", this); 
    } 
}; 

现在我想知道如果这是最好的方式还是应该使用ShouldPerformSegue,像这样:

saveButton.Clicked += (object sender, EventArgs e) => ShouldPerformSegue ("nextScreen", this); 

ShouldPerformSegue方法:

public override bool ShouldPerformSegue (string segueIdentifier, NSObject sender) 
{ 
    bool validScreen = ValidateScreen(); 
    bool result = true; 
    if (!validScreen) { 
     result = false; 
    } 
    return result; 
} 

那么最好的方法是什么?为什么我会用ShouldPerformSegue更多的代码,如果我当前的代码也在工作,但为什么会出现ShouldPerformSegue方法?

(PS。在ShouldPerformSegue还没有成型,没有任何人知道为什么吗?不是主要的问题..)

回答

2

在这种情况下,ShouldPerformSegue的文档可能有些模糊。

当您想要中止通过故事板调用的时,通常希望覆盖并使用ShouldPerformSegue

enter image description here

在上图中的项目中,我们得到了Button造成VC通过故事板推赛格瑞题为“二”。现在我们可以在代码中使用ShouldPerformSegue函数来控制故事板中的这段延迟是否应该通过从该函数返回true/false来实际执行到“Second”VC的转换。

如果在该故事板中有多个segue,那么您也可能在这些点上使用segue标识符来标识当前正在处理的segue(假设您为故事板中的segue设置标识符)。

在你的情况下,你从代码调用PerformSegue("nextScreen", this);,所以本质上你会知道什么时候应该实际调用它(使用ValidateScreen())。因此,您可以放心地忽略覆盖,并按照最初的步骤进行操作。

0
-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

{ return YES/NO; }

你可以使用上的方法,只是验证SEGUE如果您的所有验证都一致,则返回YES,否则返回NO。

+0

这就是Objective-C,如果我是对的,我应该比'C#'标签更清楚地提到它。我使用Xamarin Studio,因此全部都在'C#'中。但是,如果我尝试'返回YES;'我得到一个错误:'在当前上下文中不存在'。 –