第一次感动-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