Swift消息文本区域

时间:2016-05-12 06:11:24

标签: swift swift2

我正在创建一个新的应用程序,我想添加消息区域,如:

enter image description here

当用户点击文本区域键盘时会显示并且用户开始写入消息右键将发送按钮和文本区域将会增长如下:

enter image description here

这样做的简单方法是什么?

我有一个想法,但我认为这不是最好的方法。我想以程序化的方式解决它。在viewLoad中,我将以编程方式创建按钮和文本区域,然后当用户开始编写时,我将再次创建它们。

3 个答案:

答案 0 :(得分:1)

正如official apple documentation中所述,您可以使用UITextField委托方法拦截不同的状态。

例如,您可以使用textFieldDidBeginEditing(_:)来处理用户开始编辑的时刻。在这里,您可以处理约束以扩大textField(注意,如果使用自动布局,则必须使用约束,不要进行帧修改):

func textFieldDidBeginEditing(textField: UITextField!) {
    //
    // hide photo button
    // change mic button to send button
    self.textFieldTrailingConstraint.constant = 10.0
    UIView.animateWithDuration(0.5) {
        self.view.layoutIfNeeded()
    }
}

之后你可以处理其他代表:

func textFieldShouldEndEditing(textField: UITextField!) -> Bool {  
    return false
}

func textFieldShouldReturn(textField: UITextField!) -> Bool { 
  textField.resignFirstResponder()

    return true
}

你可以在那里重复你的动画或做任何你想做的事。

答案 1 :(得分:0)

我还建议在代码中解决此问题。加载视图您必须创建所有按钮,如果用户开始编写,您应该重新创建一些按钮。但请记住,您必须确保Textfield是相同的实例,或者您必须通过代码将响应者重新签名。

答案 2 :(得分:0)

除了文本字段委托之外,您还需要处理键盘:

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}
相关问题