在开发应用程序时会经常用到输入消息并发送消息的功能,比如今日头条或者UC头条这些软件底部都会有,如何想向这些应用一样点击UITextField或者UITextView就可以弹出键盘并在键盘上也能加上同意的输入和发送功能?
不少iOS同仁是通过监听触发键盘弹起和收起后的高度在相关位置添加输入消息和发送消息的视图或者改变视图的高度来实现的,这样比较麻烦,如何在不需监听键盘弹起和收起的情况下实现这样的功能?通过苹果自带的UITextField和UITextView的属性就可以实现如下图所示功能:
17.gif
UITextField和UITextView都有个辅助属性inputAccessoryView
,通过它可以在键盘上添加视图,并实现先关功能,方法很简单,如下代码所示:
import UIKit
class ViewController: UIViewController {
let kScreenWidth = UIScreen.main.bounds.size.width
let toolBar: UIToolbar = {
//创建ToolBar
let tmpToolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 70))
tmpToolBar.backgroundColor = UIColor.gray
return tmpToolBar
}()
var textView: UITextView!
@IBOutlet weak var inputTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
//创建UITextView
textView = UITextView(frame: CGRect(x: 0, y: 5, width: kScreenWidth/4*3, height: 60))
textView.backgroundColor = UIColor.lightGray
let inputItem = UIBarButtonItem(customView: textView)
//创建发送按钮
let sendBtn = UIButton(frame: CGRect(x: 0, y: 5, width: kScreenWidth/4-40, height: 50))
sendBtn.contentMode = .center
sendBtn.setTitle("发送", for: .normal)
sendBtn.setTitleColor(UIColor.blue, for: .normal)
sendBtn.addTarget(self, action: #selector(handleSend(event:)), for: .touchUpInside)
let sendItem = UIBarButtonItem(customView: sendBtn)
//ToolBar添加textView和发送按钮
toolBar.items = [inputItem,sendItem]
//赋值给UITextField的inputAccessoryView
inputTextField.inputAccessoryView = toolBar
}
func handleSend(event: UIButton) -> () {
print(textView.text)
view.endEditing(true)
}
}
是不是很简单。open var inputAccessoryView: UIView?
可以看出,由于是UIView,所以可以放你想放的所以View和设置想设置的高度。
对inputAccessoryView
感兴趣的同学,可以试下inputView
会有惊喜的哦!
网友评论