2015-01-09 109 views
0

我UITextField類擴展:呼叫類擴展的委託方法,斯威夫特

extension UITextField { 
    ... 
} 

而且類的UITextField有協議:

protocol UITextFieldDelegate : NSObjectProtocol { 
    . . . 
    optional func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool // return NO to not change text 
    . . . 
} 

如何使用「協議法」或「我怎麼能檢測到更改字符「在我的擴展?

-

我的主要目標是發現性格改變的範圍。

+0

你們是不是在文本字段改爲得到通知,什麼文字是變化的,或者是你想添加自己的功能來代替'文本框(_,shouldChangeCharactersInRange,replacementString)'? – keithbhunter 2015-01-09 18:57:49

+0

我希望以任何方式檢測字段中的變化字符。 UITextField允許使用這3個通知:'讓UITextFieldTextDidBeginEditingNotification:NSString! let UITextFieldTextDidEndEditingNotification:NSString!讓我們使用UITextFieldTextDidChangeNotification:NSString!',但這還不夠。我的主要目標是檢測字符改變的範圍。 Thx – 2015-01-10 09:22:48

回答

0

你想在這種情況下的協議方法。您可以將textFields的委託設置爲您的視圖控制器,然後隨時會告訴您文本已更改以及更改的內容。一定要聲明你的視圖控制器實現了UITextFieldDelegate方法。這是一個檢測文本字段更改的示例視圖控制器。

class ViewController: UIViewController, UITextFieldDelegate { 

    @IBOutlet weak var textField: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // this allows the shouldChangeCharactersInRange method to be called 
     self.textField.delegate = self 
    } 

    // UITextFieldDelegate method 
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
     // range is the range of which characters changed 
     // string is the characters that will replace the textField.text's characters in the given range 
     return true 
    } 

} 
+0

是的,我認爲這是正確的方向。但現在我有另一個問題: - 當我用UITextFieldDelegate協議創建我的子類在單獨的文件並使用適當的方法。所有作品。但是如果有人想在ex中使用UITextFieldDelegate。 ViewController類,我的協議方法將被新的覆蓋。 – 2015-01-12 12:47:17

+0

我需要更多的細節。是子類ViewController?是否有連接到ViewController的多個文本字段都將依賴'shouldChangeCharactersInRange'? – keithbhunter 2015-01-12 21:22:08

+0

Thx爲您提供幫助。這裏是新的問題鏈接http://stackoverflow.com/questions/27928392/call-protocol-method-twice-swift – 2015-01-13 17:53:59