Swift消息文本区
我正在创建一个新应用程序,我想添加如下消息区域: 当用户单击文本区域时,将显示键盘,用户开始编写消息,右键将是发送按钮,文本区域将增长如下: 最简单的方法是什么Swift消息文本区,swift,swift2,Swift,Swift2,我正在创建一个新应用程序,我想添加如下消息区域: 当用户单击文本区域时,将显示键盘,用户开始编写消息,右键将是发送按钮,文本区域将增长如下: 最简单的方法是什么 我有个主意,但我认为这不是最好的办法。我正在考虑用程序解决它。在viewLoad中,我将以编程方式创建按钮和文本区域,然后当用户开始写入时,我将再次创建它们 我还建议用代码解决这个问题。加载视图时,必须创建所有按钮,如果用户开始写入,则应重新创建部分按钮。但请记住,您必须确保Textfield是同一个实例,或者您必须通过代码将响应者
我有个主意,但我认为这不是最好的办法。我正在考虑用程序解决它。在viewLoad中,我将以编程方式创建按钮和文本区域,然后当用户开始写入时,我将再次创建它们 我还建议用代码解决这个问题。加载视图时,必须创建所有按钮,如果用户开始写入,则应重新创建部分按钮。但请记住,您必须确保Textfield是同一个实例,或者您必须通过代码将响应者提交给它。如中所述,您可以使用
UITextField
委托方法来截获不同的状态
例如,您可以使用来处理用户开始编辑的时刻。在这里,您可以处理约束以放大文本字段(请注意,如果使用“自动布局”,则必须使用约束,不要进行帧修改):
之后,您可以处理其他代理:
func textFieldShouldEndEditing(textField: UITextField!) -> Bool {
return false
}
func textFieldShouldReturn(textField: UITextField!) -> Bool {
textField.resignFirstResponder()
return true
}
在这里,您可以重复动画或执行任何您想要的操作。除了文本字段代理,您还需要处理键盘:
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector:"keyboardWillAppear:", name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector:"keyboardWillDisappear:", name: UIKeyboardWillHideNotification, object: nil)}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
NSNotificationCenter.defaultCenter().removeObserver(self)}
func keyboardWillAppear(notification: NSNotification){
var userInfo:NSDictionary = notification.userInfo!
var keyboardSize:CGSize = userInfo.objectForKey(UIKeyboardFrameBeginUserInfoKey)!.CGRectValue().size
var contentInsets:UIEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0)
self.tableView.contentInset = contentInsets
self.tableView.scrollIndicatorInsets = contentInsets
var messageFrame:CGRect = self.commentField.frame
messageFrame.origin.y -= keyboardSize.height
self.commentField.frame = messageFrame}
func keyboardWillDisappear(notification: NSNotification){
var userInfo:NSDictionary = notification.userInfo!
var keyboardSize:CGSize = userInfo.objectForKey(UIKeyboardFrameBeginUserInfoKey)!.CGRectValue().size
UIView.beginAnimations(nil, context: nil)
UIView.setAnimationDuration(0.25)
self.tableView.contentInset = UIEdgeInsetsZero
UIView.commitAnimations()
self.tableView.scrollIndicatorInsets = UIEdgeInsetsZero
var messageFrame:CGRect = self.commentField.frame
messageFrame.origin.y += keyboardSize.height
self.commentField.frame = messageFrame}
除了textfield委托,您还需要处理键盘。
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector:"keyboardWillAppear:", name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector:"keyboardWillDisappear:", name: UIKeyboardWillHideNotification, object: nil)}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
NSNotificationCenter.defaultCenter().removeObserver(self)}
func keyboardWillAppear(notification: NSNotification){
var userInfo:NSDictionary = notification.userInfo!
var keyboardSize:CGSize = userInfo.objectForKey(UIKeyboardFrameBeginUserInfoKey)!.CGRectValue().size
var contentInsets:UIEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0)
self.tableView.contentInset = contentInsets
self.tableView.scrollIndicatorInsets = contentInsets
var messageFrame:CGRect = self.commentField.frame
messageFrame.origin.y -= keyboardSize.height
self.commentField.frame = messageFrame}
func keyboardWillDisappear(notification: NSNotification){
var userInfo:NSDictionary = notification.userInfo!
var keyboardSize:CGSize = userInfo.objectForKey(UIKeyboardFrameBeginUserInfoKey)!.CGRectValue().size
UIView.beginAnimations(nil, context: nil)
UIView.setAnimationDuration(0.25)
self.tableView.contentInset = UIEdgeInsetsZero
UIView.commitAnimations()
self.tableView.scrollIndicatorInsets = UIEdgeInsetsZero
var messageFrame:CGRect = self.commentField.frame
messageFrame.origin.y += keyboardSize.height
self.commentField.frame = messageFrame}