簡體   English   中英

當UITextField位於UIScrollView內時,使用“敲擊手勢”關閉鍵盤的問題。

[英]Issues with dismiss keyboard using Tap Gesture when UITextField is inside UIScrollView.

我設計的應用程序具有以下層次結構:

UIViewController
  UIView
    UIScrollView
      UITextField

在ViewDidLoad上,我做了:

...
tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
    tapGesture.cancelsTouchesInView = NO;
    [self.scrollView addGestureRecognizer:tapGesture];
...

在hideKeyboard上,我執行了以下操作:

- (void) hideKeyboard {
    //Hide keyBoard
    [self.view endEditing:YES];
}

乍一看,它可以完美運行,但不幸的是存在問題。 當應用程序運行時,我們可以單擊UITextField,按預期顯示鍵盤。 如果我們在U​​ITextField旁邊單擊, hideKeyboard調用hideKeyboard方法的方法, hideKeyboard預期方式關閉鍵盤,但是如果嘗試再次單擊UITextField,則不會再次顯示鍵盤。

我做錯了什么? 有人知道嗎

它是每次需要用戶反饋時都要處理的非常普遍的問題。 如果Apple在即將到來的框架版本中包含此類日常功能,將非常有幫助。

對於如何在編輯過程中將UITextField和UITextView移出鍵盤的方式,有一百一十種建議的解決方案-通常歸結為觀察

  1. UIKeyboardWillShowNotification和UIKeyboardWillHideNotification,或
  2. 實現UITextFieldDelegate委托方法,並調整超級視圖的框架,或者
  3. 使用UITableView的scrollToRowAtIndexPath:atScrollPosition:animated:

但是我發現的所有建議的解決方案往往都是完全DIY的,必須為每個需要它的視圖控制器實現。

解決方案由Michael Tyson提供... 用於將文本字段移出鍵盤的嵌入式通用解決方案您可以在GitHub項目頁面上獲取源文件,其中包括一個示例項目

嘗試這個..

- (void) hideKeyboard 
{
    //Hide keyBoard
    [self.view endEditing:YES];
    [self.scrollView bringSubViewToFront:YourTextField];
}

我曾經想檢測滾動視圖上的觸摸,類似於UIView上的觸摸。

為了訪問滾動視圖上的觸摸,如觸摸開始和觸摸結束,以及其他此類方法,我將UIScrollView子類化,並且能夠訪問scrollview上的所有觸摸事件。

如果要訪問UIView和UIScrollView上的觸摸事件,請嘗試執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM