第一次感动-Swift代表
星期一,Peter Pan的iOS Swift类的新主题是如何使用委托。 今天,我将向您展示如何使用“ UITextFieldDelegate”中的函数来处理事件。
今天的挑战是设置一个文本字段,规则是我们只能在文本字段中插入10个字符。此外,必须有一个标签来显示我可以插入多少个字符。 因为今天的要点不在情节提要上,所以我直接跳到viewController。 首先,我让类实现UITextFieldDelegate,以便可以在委托中使用函数来处理insert事件。
类ViewController:UIViewController,UITextFieldDelegate {
然后转到情节提要,右键单击鼠标并将委托拖到viewController。
这是我在练习中使用的功能。
func textField(_ textField:UITextField,shouldChangeCharactersIn范围:NSRange,replaceString字符串:String)-> Bool {}
现在回到viewController并开始插入代码。 您可以在每一行上看到这些注释。
导入UIKit
类ViewController:UIViewController,UITextFieldDelegate {
@IBOutlet弱var countDownLabel:UILabel!
@IBOutlet弱var insertTxt:UITextField!
let limitCHTs = 10 //设置字符数限制
func textField(_ textField:UITextField,shouldChangeCharactersIn范围:NSRange,replacementString字符串:String)-> Bool {
let oldLength = textField.text?.characters.count //在交互之前获取文本长度
let insertLength = string.characters.count //获取插入的文字长度
让newLength = oldLength! + insertLength-range.length //插入后计算文本长度
let isWithinLimit = newLength <= limitCHTs //查看最终长度是否超过限制
如果isWithinLimit {
countDownLabel.text = String(limitCHTs-newLength)//更改标签的文本
}
返回isWithinLimit
}
func textFieldShouldReturn(_ textField:UITextField)-> Bool {
self.insertTxt.resignFirstResponder()//按下返回键时关闭键盘
返回真
}
覆盖func viewDidLoad(){
super.viewDidLoad()
self.insertTxt.delegate =自我
countDownLabel.text = String(limitCHTs)//设置倒数标签的初始值
}
覆盖func didReceiveMemoryWarning(){
super.didReceiveMemoryWarning()
//处理所有可以重新创建的资源。
}
}
现在,让我们转到textview。 在UITextViewDelegate中,有一个类似函数来处理textview项的插入事件,并且您可以看到以下代码,因为这两个代码段几乎相同,只有变量“ String”的名称更改为“ text” ,因此在本段中我没有添加注释。
func textView(_ textView:UITextView,shouldChangeTextIn范围:NSRange,replaceText文本:String)-> Bool {
让oldLength = textView.text.characters.count
让insertLength = text.characters.count
让newLength = oldLength + insertLength-range.length
let isWhthinLimit = newLength <= limitCHTs
如果isWhthinLimit {
countDownLabelTV.text =字符串(limitCHTs-newLength)
}
返回isWhthinLimit
}
func textFieldShouldReturn(_ textField:UITextField)-> Bool {
self.insertTxt.resignFirstResponder()
返回真
}
本练习中最重要的一点是如何使用退格键和粘贴事件进行处理,使用退格键按钮进行处理,我们可以在函数中使用range.length,如果您研究api文档,它将向您显示当用户按下退格键时按钮,系统会将其视为1个插入范围(其他按钮为0),并用“”代替字符或空格,如果要粘贴,我们必须知道用户可能粘贴1个以上的字符(最多他们想要的),因此我们必须计算文本字段中的总字符数,并查看此粘贴事件是否合法。
如果您想了解更多有关此做法的信息,请参阅我的github
https://github.com/imbearfly/HW8.git