2015-10-15 74 views
-1

编辑完textField后,我不会问如何隐藏键盘。我的问题是:有没有办法在每个视图上执行此操作? (如设置)还是我需要编写以下两个函数并每次都正确设置委托?在每个视图上隐藏键盘 - Swift

func textFieldShouldReturn(textField: UITextField) -> Bool // called when 'return' key pressed. return NO to ignore. 
{ 
    textField.resignFirstResponder() 
    return true; 
} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    self.view.endEditing(true) 
} 

我发展了很多文本框(以及视图)的应用程序,所以我会尽量避免冗余代码。避免这种重复的最佳解决方案是什么?

谢谢!

+0

写自己的自定义文本字段(如'JibeTextField'),这是也是UITextField的子类,然后覆盖你想它的任何方法。学习如何使用这个项目编写https://github.com/dhawaldawar/TextFieldValidator。他在Objective-C中写道。如果你不能,明天我会为你写信:D – t4nhpt

回答

0

您可以创建自己的文本字段,它是UITextField的子类。请参阅下面的简单的自定义的UITextField:

import UIKit 

class CustomTextField: UITextField, UITextFieldDelegate { 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     self.delegate = self 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 

     self.resignFirstResponder() 

     return true 
    } 
} 

在你的故事板使用您的自定义文本字段名​​。

见我的例子在Github

+0

看起来是最好的解决方案谢谢@ t4nhpt – Jibeee

+0

如果文本字段'keyboardType'是'UIKeyboardTypeNumberPad'?也请检查我的解决方案。它需要最少的编码,也可以在'UITextView'上使用。它对用户来说更直观。 – Nishant

+0

这是一个怎样的答案,这只能处理文本视图并不是所有的视图 – Knight0fDragon

0

最简单的做法是在屏幕下方放置一个巨大的隐形按钮,然后点击非文本字段时,您会调用不可见的按钮动作来关闭它。如果这不适用于您的情况,请告诉我。

+0

不是一个好的方法。 – Nishant

+0

解释这不是一个好方法,这是在很多应用程序中完成的方式。我相信我的一本iOS书籍实际上是这么说的,如果我遇到过这个参考,我会发布它 – Knight0fDragon

+1

添加一个新的UI组件只会增加UI层次结构的复杂性,特别是使用'AutoLayout'时。让我们假设你有一个20个屏幕的应用程序,你打算在后台添加一个按钮吗?需要更通用的解决方案。 – Nishant

0
  1. 创建IBAction方法来关闭键盘

    @IBAction func backgroundTapped (sender: UIView) 
    { 
        sender.endEditing(true) 
    } 
    
  2. 改变类的UIViewUIControl的包含在故事板的文本框(你甚至可以做那对你的视图控制器的看法如图所示)

Setting the custom class

它看起来像这样:

It looks like this

  • 现在可以将IBAction连接到Touch Up Inside事件这一观点,在故事板,作为所示。
  • Touch Up Inside