使用带有TextField的自定义表格视图单元格关闭数字键盘

时间:2015-11-04 01:05:02

标签: ios

我有一个带有自定义单元格和文本字段的tableview。如下图所示。

Custom Cell

自定义单元格的类:

<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调用时没有控制台警告就停止了。

2 个答案:

答案 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.
}