如何验证UITable视图单元格中的文本字段

时间:2017-03-09 15:37:17

标签: ios swift

我有一个自定义单元格:

class CustomOneCell: UITableViewCell {
@IBOutlet weak var middleLabel: UILabel!
@IBOutlet weak var TextField: UIText!

}

在我的ViewController我用它作为

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("CustomCellOne", forIndexPath: indexPath) as! CustomOneCell
     cell.middleLabel.text = self.model.Fieldname 

    return cell
}

我的UITableView中有大约15个单元格,其中一个是电子邮件。 现在为标签电子邮件的UITextField。我需要进行电子邮件验证。那么我该如何对该领域进行验证呢? 任何想法将非常感激。对于我使用的电子邮件验证。

func isValidEmail(testStr:String) -> Bool {
    print("validate emilId: \(testStr)")
    let emailRegEx = "^(?:(?:(?:(?: )*(?:(?:(?:\\t| )*\\r\\n)?(?:\\t| )+))+(?: )*)|(?: )+)?(?:(?:(?:[-A-Za-z0-9!#$%&’*+/=?^_'{|}~]+(?:\\.[-A-Za-z0-9!#$%&’*+/=?^_'{|}~]+)*)|(?:\"(?:(?:(?:(?: )*(?:(?:[!#-Z^-~]|\\[|\\])|(?:\\\\(?:\\t|[ -~]))))+(?: )*)|(?: )+)\"))(?:@)(?:(?:(?:[A-Za-z0-9](?:[-A-Za-z0-9]{0,61}[A-Za-z0-9])?)(?:\\.[A-Za-z0-9](?:[-A-Za-z0-9]{0,61}[A-Za-z0-9])?)*)|(?:\\[(?:(?:(?:(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5]))\\.){3}(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5]))))|(?:(?:(?: )*[!-Z^-~])*(?: )*)|(?:[Vv][0-9A-Fa-f]+\\.[-A-Za-z0-9._~!$&'()*+,;=:]+))\\])))(?:(?:(?:(?: )*(?:(?:(?:\\t| )*\\r\\n)?(?:\\t| )+))+(?: )*)|(?: )+)?$"
    let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
    let result = emailTest.evaluateWithObject(testStr)
    return result
}

我正在创建一个注册表单,表单的所有内容都是从API甚至字段名称

加载的

2 个答案:

答案 0 :(得分:0)

我说这里有两个问题。

  • 在应用程序的生命周期中,我们应该进行验证吗?当用户结束对文本字段的编辑时,您可能希望这样做。因此,您需要为文本字段指定委托,以便在我们无效时检测textFieldShouldEndEditing(_:),验证并阻止结束编辑。

  • 一旦你完成了这项工作,你怎么知道这是电子邮件文本字段?显然,电子邮件文本字段需要与其他字段不同。一个简单的解决方案是给电子邮件文本字段一个tag值,您可以检查。所有其他文本字段可能具有tag0,而此文本字段的值为tag 1

这些内容都将在cellForRowAt:实现中配置(确切地说,当前代码的空行位置)。您知道哪一行是电子邮件行,因此必须专门处理其文本字段。但是,请务必覆盖每一行,因为如您所知,细胞会被重复使用。

答案 1 :(得分:0)

简易方式[快速5]

自定义表格视图单元格的第一个声明数组

//MARK:- DECLARATIONS
var DataSource = 5 //Five textField in TableCell
var arrayOfCell = [tableViewCell]() 

TableView方法

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return DataSource
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "txtCell", for: indexPath) as! tableViewCell

    arrayOfCell += [cell]

    return cell

}

按钮(提交),当您要验证文本字段时

@IBAction func btnSubmit(_ sender: Any) {

    for i in 0..<arrayOfCell.count{
        if arrayOfCell[i].txtName.hasText != true{
            let alert = UIAlertController(title: "Warning!", message: "Please enter the text No: \(i)", preferredStyle: UIAlertController.Style.alert)
            alert.addAction(UIAlertAction(title: "Continue", style: UIAlertAction.Style.default, handler: nil))
            self.present(alert, animated: true, completion: nil)
        }
    }

}