对多个字段使用UITextFieldDelegate

问题描述:

我有以下代码以防止用户输入UITextField中的多个句点.,它工作正常,但我想对其他两个textField执行相同的操作,这怎么办?对多个字段使用UITextFieldDelegate

我试着将delegate分配给多个字段,但它不起作用,它只适用于第一个应答。

class UserInputViewController: UIViewController, UITextFieldDelegate{ 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.myTextField.delegate = self 
    } 

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

    let periodsInTextField = myTextField.text!.componentsSeparatedByString(".").count - 1 

    if (periodsInTextField > 0 && string == "."){ 
     return false 
    } 
    return true 
} 
} 

编辑(答案):下面是基于@ KKRocks的答案,下面是应该如何完成的。

class UserInputViewController: UIViewController, UITextFieldDelegate{ 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.myTextField.delegate = self 
     self.secondTextField.delegate = self 
     self.thirdTextField.delegate = self 
    } 

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

    let periodsInTextField = textField.text!.componentsSeparatedByString(".").count - 1 

    if (periodsInTextField > 0 && string == "."){ 
     return false 
    } 
    return true 
} 
} 
+0

给下一文本字段相同的委托,你可以很容易地执行它 –

请更改这一行

来源:

let periodsInTextField = myTextField.text!.componentsSeparatedByString(".").count - 1 

要:

let periodsInTextField = textField.text!.componentsSeparatedByString(".").count - 1 
+0

@ KKRocks - 的委托不需要改变'self.myTextField.delegate = self'?如何将一个textField作为委托分配给多个字段。对不起,但我不是在我的电脑前试用它。 –

+1

@fs_tigre如果检查委托方法'textField(textField:UITextField,shouldChangeCharactersInRange range:NSRange,replacementString string:String)'它返回一个实例'textfield:UITextField'。这将是相同的调用委托的文本字段。您只需要执行KKRocks提到的操作/更改。 – ibnetariq

+0

我想我对代表团的工作方式有些困惑,我认为委托人发送的信息只会被分配给代理人的人接收,在这种情况下'myTextField'将是唯一能够知道关于这些消息'myTextField',因为它是分配给委托的那个。这个说法我错了吗? –