我有一个带有自定义单元格和文本字段的tableview。如下图所示。
自定义单元格的类:
<ScrollView>
<StackLayout cssClass="bodyPilihProduk">
<Repeater items="{{ myItems }}" style="font-size:12;">
<Repeater.itemTemplate>
<Label text="{{value}}" margin="10" />
</Repeater.itemTemplate>
</Repeater>
<Repeater items="{{ myItems }}" style="font-size:20;">
<Repeater.itemTemplate>
<Label text="{{ item }}" margin="10" />
</Repeater.itemTemplate>
</Repeater>
</StackLayout>
</ScrollView>
永远不会调用此委托方法
import UIKit
protocol TextFieldTableDelegate{
func retornaTexto(sender: TextFieldTableViewCell, texto: String)
}
class TextFieldTableViewCell: UITableViewCell, UITextFieldDelegate {
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var label: UILabel!
var delegate: TextFieldTableDelegate?
override func awakeFromNib() {
super.awakeFromNib()
self.textField.delegate = self
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
self.delegate!.retornaTexto(self, texto: textField.text!)
return true
}
}
问题是,在我触摸文本字段后,它会打开数字键盘,但是当我触摸它(在背景上)时它不会消失。
我已经尝试了这个Swift - How to dismiss number keyboard after tapping outside of the textfield,但它打破了视图中所有其他接触的东西。
编辑:我将数字键盘隐藏起来并显示添加到我的viewController,但它不会触发委托方法。 func retornaTexto(sender: TextFieldTableViewCell, texto: String) {
print(texto)
codigoAreaSelecionada = texto
}
编辑:
我改变了方法:
var tapRecognizer : UITapGestureRecognizer?
func keyboardWillHide(notification: NSNotification) {
view.removeGestureRecognizer(tapRecognizer!)
}
func keyboardWillShow(notification: NSNotification) {
tapRecognizer = UITapGestureRecognizer(target: self, action: "didTapView")
view.addGestureRecognizer(tapRecognizer!)
}
func didTapView(){
self.view.endEditing(true)
}
使用: func textFieldDidEndEditing(textField:UITextField){
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
self.delegate!.retornaTexto(self, texto: textField.text!)
return true
}
但是在retornaTexto调用时没有控制台警告就停止了。
答案 0 :(得分:1)
当具有完整键盘的TextField上点击Return键时,会调用textFieldShouldReturn。数字键盘没有返回键,所以这不适用于您的情况。
可能正确的方法是将手势识别器添加到文本框外部的视图(可能是视图控制器的视图?)以关闭键盘(就像您引用的问题一样);但是在键盘上这样做;并将其从键盘上移除隐藏。您可以为这些事件添加UINotification事件:请参阅How to detect when keyboard is shown and hidden
您还可以使用这些事件来更改表格的表格插图,以便数字输入单元格也可以在小型手机上的键盘上方显示!
答案 1 :(得分:1)
也许您可以尝试其他方法,修改keyboardDismissMode
的{{1}}属性。
这是在iOS 7.0中实现这一目标的最简洁方法。
UITableView
或触摸时解雇
tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
我认为您可以在编辑结束时实现此委托方法。
tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;
或者,通过以下方式获取编辑事件。
-(void)textFieldDidEndEditing:(UITextField *)textField
{
// receive the end of editing of UITextField.
}