【问题标题】:dismissing iOS keyboard on tap without breaking table view cell tap functionality在不破坏表格视图单元格点击功能的情况下关闭 iOS 键盘
【发布时间】:2016-05-10 03:37:32
【问题描述】:

我想添加功能以在用户在键盘外点击时关闭 UITextFieldsUITextViews 上的键盘。我有一个与 iOS 日历中的新事件非常相似的视图,它是一堆静态表格单元格,其中一些有文本字段,一些发送到显示视图(如日历应用程序中新事件中的“重复”单元格)。

我尝试使用以下内容:

override func viewDidLoad() {
    super.viewDidLoad()

    //Looks for single or multiple taps. 
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
    view.addGestureRecognizer(tap)
}

//Calls this function when the tap is recognized.
func dismissKeyboard() {
    //Causes the view (or one of its embedded text fields) to resign the first responder status.
    view.endEditing(true)
}

但这会破坏点击以转到节目的单元格的功能。我可以通过让键盘按下“返回”来解决这个问题,但我不能用我的UITextView 做到这一点,因为它会添加一个换行符。日历应用程序在似乎向上和向下滑动时关闭了UITextView 中的键盘,但我不确定如何自己添加此功能,因为我是 iOS 编程新手。

有解决这个问题的办法吗?

【问题讨论】:

    标签: ios swift uitableview uitextfield uitextview


    【解决方案1】:

    在情节提要中选择您的 tableView。然后在属性检查器中找到键盘并设置为“交互式关闭”。这应该允许向下滑动关闭。

    【讨论】:

    • 这不适用于 iOS 10 模拟器。我错过了什么吗? Dismiss on drag 效果很好。
    【解决方案2】:

    日历应用在 UITextView 中似乎上下滑动时关闭键盘

    确实如此。这就是你应该做的。文本视图和表格视图都是滚动视图。因此,通常的解决方案是将滚动视图的keyboardDismissMode 设置为.Interactive.OnDrag。日历就是这样做的,你也应该这样做。

    【讨论】:

    • 所以我尝试了self.tableView.keyboardDismissMode = .OnDrag(.Interactive 似乎对我没有任何作用),它似乎可以按我的意愿工作,向上或向下拖动会在文本字段/视图中关闭键盘。但是,当我滑动关闭时,我会在日志中打印此内容 -[UIWindow endDisablingInterfaceAutorotationAnimated:] called on <UITextEffectsWindow: 0x144d62150; frame = (0 0; 375 667); opaque = NO; autoresize = W+H; layer = <UIWindowLayer: 0x144d07110>> without matching -beginDisablingInterfaceAutorotation. Ignoring. 这是我需要担心的事情吗?
    • 不,这只是与键盘相关的虚假消息。如果您有时间,请向 Apple 报告,但您可以放心地忽略它。
    【解决方案3】:

    另一种解决方案是,您可以在视图上添加UITapGestureRecognizer,然后在点击视图时关闭键盘,如下所示。

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    [self.view addGestureRecognizer:tapGesture];
    
    -(void)handleTap:(UITapGestureRecognizer *)sender {
        //do stuff
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 2018-01-23
      • 2012-12-03
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多