检查验证并执行segue vs应执行segue

时间:2014-05-01 09:29:17

标签: c# ios xamarin.ios segue

我正在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还没有工作,有人知道为什么吗?不是主要问题..)

2 个答案:

答案 0 :(得分:2)

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

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

enter image description here

在上面的图片项目中,我们获得了Button导致VC名为" Second"通过故事板中的推送segue。现在我们可以在代码中使用ShouldPerformSegue函数来控制故事板中的这个segue何时应该实际转换到" Second" VC通过从该函数返回true / false。

如果你有多个segue'你也可能会在这些点使用segue标识符来识别当前正在处理的segue(前提是你在故事板中为segue设置了一个标识符)。来自该VC的故事板。

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

答案 1 :(得分:0)

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

{ return YES/NO; }

如果你的所有验证都是正确的,你可以使用upper方法来验证你的segue只返回YES,否则你可以返回NO。