在. numberpad键盘类型上没有“完成”按钮。当用户在文本字段中输入数字信息时,如何使数字pad消失?
我可以使用默认键盘来获得“完成”按钮,但用户必须切换到数字键才能输入数字。有没有办法在数字板上显示“完成”按钮?
在. numberpad键盘类型上没有“完成”按钮。当用户在文本字段中输入数字信息时,如何使数字pad消失?
我可以使用默认键盘来获得“完成”按钮,但用户必须切换到数字键才能输入数字。有没有办法在数字板上显示“完成”按钮?
当前回答
Swift 2.2 /我用了Dx_的答案。然而,我希望所有的键盘都有这个功能。所以在我的基类中,我把代码:
func addDoneButtonForTextFields(views: [UIView]) {
for view in views {
if let textField = view as? UITextField {
let doneToolbar = UIToolbar(frame: CGRectMake(0, 0, self.view.bounds.size.width, 50))
let flexSpace = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
let done = UIBarButtonItem(title: "Done", style: .Done, target: self, action: #selector(dismissKeyboard))
var items = [UIBarButtonItem]()
items.append(flexSpace)
items.append(done)
doneToolbar.items = items
doneToolbar.sizeToFit()
textField.inputAccessoryView = doneToolbar
} else {
addDoneButtonForTextFields(view.subviews)
}
}
}
func dismissKeyboard() {
dismissKeyboardForTextFields(self.view.subviews)
}
func dismissKeyboardForTextFields(views: [UIView]) {
for view in views {
if let textField = view as? UITextField {
textField.resignFirstResponder()
} else {
dismissKeyboardForTextFields(view.subviews)
}
}
}
然后只需调用addDoneButtonForTextFields在self.view.subviews在viewDidLoad(或willDisplayCell如果使用表格视图)添加完成按钮到所有键盘。
其他回答
这是我遇到的最简单的解决办法。我是从《iOS 5开发入门》这本书中学到的。
假设数字字段名为numberField。
In ViewController, add the following method: -(IBAction)closeKeyboard:(id)sender; In ViewController.m, add the following code: -(IBAction)closeKeyboard:(id)sender { [numberField resignFirstResponder]; } Go back to nib file. Open Utilities pan. Open the Identity inspector under Utilities pan. Click on the View (in nib file) once. Make sure you have not clicked on any of the items in the view. For the sake of clarification, you should see UIView under Class in Identity inspector. Change the class from UIView to UIControl. Open Connection Inspector. Click and drag Touch Down and drop the arrow on File Owner icon. (FYI... File Owner icon is displayed on the left of View and appears as a hollow cube with yellow frame.) Select the method: closeKeyboard. Run the program.
现在,当你点击视图背景的任何地方,你应该能够解散键盘。
希望这能帮助你解决问题。: -)
SWIFT 3.0不同的风格,使用了以前一些答案的部分内容。
func addToolbarToNumberPad()
{
let numberPadToolbar: UIToolbar = UIToolbar()
numberPadToolbar.isTranslucent = true
numberPadToolbar.items=[
UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(self.cancelAction)),
UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil),
UIBarButtonItem(title: "Custom", style: .done, target: self, action: #selector(self.customAction)),
UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(self.doneAction)),
]
numberPadToolbar.sizeToFit()
textField.inputAccessoryView = numberPadToolbar
}
func cancelAction()
{
textField.resignFirstResponder()
}
func customAction()
{
textField.resignFirstResponder()
}
func doneAction()
{
textField.resignFirstResponder()
}
override func viewDidLoad()
{
super.viewDidLoad()
self.addToolbarToNumberPad()
}
我发现@user1258240的答案是非常简洁的,因为这并不像设置一个returnKeyType属性那么简单。
只是想贡献我自己的“可重用”方法:
func SetDoneToolbar(field:UITextField) {
let doneToolbar:UIToolbar = UIToolbar()
doneToolbar.items=[
UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: self, action: nil),
UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.plain, target: self, action: #selector(ViewController.dismissKeyboard))
]
doneToolbar.sizeToFit()
field.inputAccessoryView = doneToolbar
}
override func viewDidLoad() {
super.viewDidLoad()
SetDoneToolbar(field: UITextField_1)
SetDoneToolbar(field: UITextField_2)
SetDoneToolbar(field: UITextField_3)
SetDoneToolbar(field: UITextField_N)
}
如果我们告诉视图控制器的视图结束编辑,我们也可以让“user touched somewhere else”解决方案更简单:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
[self.view endEditing:YES]; //YES ignores any textfield refusal to resign
}
... 假设“触摸其他地方会取消键盘”是视图中任何其他可编辑字段所期望的行为。
let pickerView = UIPickerView()
var yearpickerToolbar: UIToolbar?
func createPickerView() {
pickerView.delegate = self
textfield.inputView = pickerView }
func dismissPickerView() {
let toolBar = UIToolbar()
toolBar.sizeToFit()
toolBar.isUserInteractionEnabled = true
textfield.inputAccessoryView = toolBar
textfield.delegate = self
yearpickerToolbar = UIToolbar()
yearpickerToolbar?.autoresizingMask = .flexibleHeight
//add buttons
let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action:#selector(cancelBtnClicked(_:)))
cancelButton.tintColor = UIColor.blue
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(title: "Done", style: .plain , target: self, action: #selector(self.doneBtnClicked(_ :) ))
doneButton.tintColor = UIColor.blue
doneButton.setTitleTextAttributes([NSAttributedString.Key.foregroundColor:
UIColor.black], for: .normal)
cancelButton.setTitleTextAttributes([NSAttributedString.Key.foregroundColor:
UIColor.black], for: .normal)
yearpickerToolbar?.items = [cancelButton, flexSpace, doneButton]
textfield.inputAccessoryView = yearpickerToolbar }
@objc func cancelBtnClicked(_ button: UIBarButtonItem?) {
self.view.endEditing(true)
}
@objc func doneBtnClicked(_ button: UIBarButtonItem?) {
self.view.endEditing(true)
}