我正在Xamarin Studio中开发一个应用程序(所以它是C#),它的表单包含多个TextField,我想在执行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尚不可用,有人知道为什么吗?不是主要问题。)

最佳答案

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

当您想中止通过情节提要调用的的segue时,通常需要覆盖并使用ShouldPerformSegue

在上图的项目中,我们通过情节提要中的推键链接将Button引至VC,名为“Second”。现在,我们可以在代码中使用ShouldPerformSegue函数,通过从该故事板返回正确/错误值,来控制何时从情节提要中选择该脚本以实际执行向“第二” VC的过渡。

如果您从VC的情节提要中有多个segue,那么您可能还会在这些点上使用segue标识符来标识当前正在处理的情节(前提是您在情节提要中设置了该情节的标识符)。

在您的情况下,您是从代码中调用PerformSegue("nextScreen", this);,因此从本质上讲,您会知道何时应该实际调用它(使用ValidateScreen())。因此,您可以放心地忽略该替代,并按照最初的操作进行操作。

10-08 15:18