键盘事件+ UIButton类型的NSNotification addObserver会触发自动动画吗?

时间:2016-01-11 00:20:53

标签: swift animation uibutton keyboard-events nsnotification

键盘显示后,我试图在键盘顶部垂直添加一个按钮。 问题在于,当我执行以下两项操作时,添加的按钮从左上角飞到我的目标位置,没有任何动画代码:

  1. 我将UIKeyboardWillShowNotification的观察者添加到NSNotification默认中心。

    NSNotificationCenter.defaultCenter()。addObserver(self,selector:" display:",name:UIKeyboardWillShowNotification,object:nil)

  2. 同时,我为UIButton设置了类型

    button = UIButton(type:.System)

  3. 或,。自定义,无论如何。 如果我没有做其中一个,那么自动终止就不会发生。 当我使用UISegmentedControl时会发生同样的问题。 有什么想法吗?

    代码: 斯威夫特2.1 您可以单击文本框并触发键盘,然后您将看到一个按钮从左上角飞到键盘顶部。如果您将button = UIButton(type: .System)替换为button = UIButton(frame: frame),则不会发生。

    import UIKit  
    class ViewController: UIViewController {  
      var textfield: UITextField?  
      var button: UIButton?  
      override func viewDidLoad() {  
        super.viewDidLoad()  
        textfield = UITextField(frame: CGRectMake(100, 100, 100, 50))  
        textfield!.layer.borderColor = UIColor.lightGrayColor().CGColor  
        textfield!.layer.borderWidth = 0.5  
        self.view.addSubview(textfield!)  
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "display:", name: UIKeyboardWillShowNotification, object: nil)  
      }  
      func display(notification: NSNotification){  
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue() {  
          button = UIButton(type: .System)  
          button?.frame = CGRectMake(300, self.view.frame.height - keyboardSize.height - 40, 100, 40)  
          button?.setTitle("Button", forState: .Normal)  
          button?.addTarget(self, action: "remove:", forControlEvents: .TouchUpInside)  
          self.view.addSubview(button!)  
        }  
      }  
      func remove(var sender: UIButton?){  
        textfield?.resignFirstResponder()  
        sender?.removeFromSuperview()  
        sender = nil  
      }  
      override func didReceiveMemoryWarning() {  
        super.didReceiveMemoryWarning()  
      }  
    }  
    

1 个答案:

答案 0 :(得分:2)

您可以在编辑文本字段时使用UIToolBar删除键盘。 试试以下代码,

 override func viewDidLoad() {
    super.viewDidLoad()

    let keyboardDoneButtonView = UIToolbar()
    keyboardDoneButtonView.sizeToFit()
    keyboardDoneButtonView.items = NSArray(objects:
        UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: "doneButton:"),
        UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)) as? [UIBarButtonItem]
    self.textField!.inputAccessoryView = keyboardDoneButtonView

}

func doneButton(sender:UIButton)
{
    self.textField.resignFirstResponder()
}

不要忘记将textField委托与UIController连接以隐藏键盘。 我希望它能奏效。 :)