我正在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
还没有工作,有人知道为什么吗?不是主要问题..)
答案 0 :(得分:2)
在这种情况下,ShouldPerformSegue的文档可能略显含糊。
当您想要中止通过故事板 中止的segue时,您通常希望覆盖并使用ShouldPerformSegue
。
在上面的图片项目中,我们获得了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。