首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用多个UITextField拒绝键盘

如何用多个UITextField拒绝键盘
EN

Stack Overflow用户
提问于 2015-04-03 19:57:57
回答 5查看 2.7K关注 0票数 3

我在这里和iOS世界都是个菜鸟。在我非常简单的待办事项列表iOS应用程序中,我很难在一个特定的情况下拒绝键盘。

当用户点击当前文本字段或键盘本身以外的任何位置时,我希望键盘被取消。到目前为止,当用户点击UITableView或我的应用程序中的大多数元素时,我的键盘就会很好地被丢弃(多亏了这里的堆叠溢出)。然而当用户点击另一个UITextField时,键盘不会离开

FYI,这是我到目前为止研究过但还没有解决这个问题的现有线程列表。( 1) How to dismiss keyboard iOS programmatically 2) Resigning First Responder for multiple UITextFields 3) Dismissing the First Responder/Keyboard with multiple Textfields 4) (至少再多几个,但我迷失了方向:( )

我到目前为止所做的事情如下:

代码语言:javascript
运行
复制
(in viewDidLoad())
// Add 'tap' gesture to dismiss keyboard when done adding/editing to-do item
var tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapOutside:")
tap.cancelsTouchesInView = true
self.view.addGestureRecognizer(tap)

func tapOutside(tapOutside: UIGestureRecognizer) {
   // Dismiss keyboard
   self.view.endEditing(true)
}

@IBAction func EditingDidBegin(sender: UITextField) {
   // Highlight the text field which user is editing
   self.highlightTextField(sender, highlight: true)
}

@IBAction func EditingDidEnd(sender: UITextField) {
   // Undo text field highlight
   self.highlightTextField(sender, highlight: false)

   self.view.endEditing(true)  // try this option and not working
   self.setEditing(false, animated: true)   // try this option and not working
   sender.resignFirstResponder()   // try this option and not working
   UIApplication.sharedApplication().becomeFirstResponder()   // try this option and not working

   ... // below is my code to update the todo item
}

我还试图打印出我的视图的所有subviews.isFirstResponder()。所有这些都是假的。我也尝试过覆盖我的UIViewController的UIViewController,在里面它只调用self.view.endEditing(真)并调用其超级的,这也不起作用。

请帮帮忙。:(

蒂娅!

更新:你们真是太棒了!:多亏了你们,我才能让它发挥作用。当我学习新的框架时,有几个错误/混乱。所以我就是这么做的。

1)没有正确设置UITextField委托。错误:我在xcode中引用了文本字段,并将我的viewController链接为委托,并认为这应该能解决问题。我仍然需要研究和了解更好的原因。解决方案:我删除了ctrl-拖动链接,并在tableView:cellForRowAtIndexPath中显式调用myTextField.delegate = self。这就成功了。谢谢@Sidewalker

2)错误:我混合了textFieldShouldBeginEditing等和@IBAction。因此,我陷入了textFieldShouldBeginEditing接到电话的情况,但EditingDidBegin没有接到电话。解决方案:一旦我显式地设置委托= self并坚持实现textField.方法,而不对textField使用任何@IBAction,一切都是正常的。

EN

Stack Overflow用户

回答已采纳

发布于 2015-04-03 20:26:25

这里有一个选择..。当对另一个textField的编辑尝试开始时,我们将添加一个布尔标志来确定我们是否在一个textField中

使您的类遵守UITextFieldDelegate

代码语言:javascript
运行
复制
class MyClass: UIViewController, UITextFieldDelegate

别忘了设置委托,我们也会添加标志

代码语言:javascript
运行
复制
myTextField.delegate = self
var inField = false

实现"textFieldShouldBeginEditing“和"textFieldDidBeginEditing”

代码语言:javascript
运行
复制
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    if inField {
        inField = false
        return false
    } 
    return true
}

func textFieldDidBeginEditing(textField: UITextField) {
    inField = true
}

我更喜欢跟踪这样的事情,而不是识别子视图,因为它允许在其他地方使用标记并降低代码复杂性。

票数 0
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29438850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档