键盘显示后,我试图在键盘顶部垂直添加一个按钮。 问题在于,当我执行以下两项操作时,添加的按钮从左上角飞到我的目标位置,没有任何动画代码:
我将UIKeyboardWillShowNotification的观察者添加到NSNotification默认中心。
NSNotificationCenter.defaultCenter()。addObserver(self,selector:" display:",name:UIKeyboardWillShowNotification,object:nil)
同时,我为UIButton设置了类型
button = UIButton(type:.System)
或,。自定义,无论如何。 如果我没有做其中一个,那么自动终止就不会发生。 当我使用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()
}
}
答案 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连接以隐藏键盘。 我希望它能奏效。 :)