【问题标题】:Monotouch User Entered Data ValidationMonotouch 用户输入数据验证
【发布时间】:2011-04-25 17:16:34
【问题描述】:
使用 monotouch 如何验证用户输入的数据?我正在为我的 iPhone 应用创建一个简单的联系表单。
在 asp.net 中,我可能会使用验证摘要来显示验证消息和必填字段,或者根据正则表达式检查电子邮件地址输入。
但是,对于 iPhone,我认为当用户在 UITextField 中输入一些数据时,我可以在触摸事件上验证该用户,然后在警报对话框中显示验证消息?
如何使我的窗体以这种方式验证?
【问题讨论】:
标签:
validation
user-interface
xamarin.ios
【解决方案1】:
我认为这是你的做法:
子类UITextFieldDelegate。覆盖ShouldEndEditing()。验证用户在ShouldEndEditing() 中输入的数据。如果数据无效,则创建并显示UIAlertView 解释数据无效的原因并从ShouldEndEditing() 返回false(或使用其他方式表示存在问题)。如果数据有效,返回true。将UITextFieldDelegate 子类对象分配给UITextField 对象的Delegate 属性。
转述 Apple 文档:
此方法[ShouldEndEditing()] 在要求文本字段放弃第一响应者状态时调用。当您的应用程序要求文本字段放弃焦点或用户尝试将编辑焦点更改为另一个控件时,可能会发生这种情况。然而,在焦点实际改变之前,文本字段会调用此方法,让您的委托有机会决定是否应该这样做。
通常,您会从此方法返回“true”以允许文本字段退出第一响应者状态。但是,如果您的委托在文本字段中检测到无效内容,您可能会返回“false”。通过返回“false”,您可以阻止用户切换到另一个控件,直到文本字段包含有效值。
【解决方案2】:
试试这个:
/// <summary>
/// Validates a text field, ensuring two letters
/// </summary>
public class CustomUITextFieldDelegate : UITextFieldDelegate
{
public override bool ShouldEndEditing (UITextField textField)
{
if (textField.Text.Length != 2) {
UIAlertView alert = new UIAlertView ("Invalid State", "Please enter a two letter state.", null, "OK", null);
alert.Show ();
return false;
}
return true;
}
}
tvState.Delegate = new CustomUITextFieldDelegate();