簡體   English   中英

響應者在UISearchBar上平移手勢

[英]Pan gesture on UISearchBar while first responder

我有一個非常類似於iOS Maps應用程序的場景-一些內容和一個表格視圖,頂部帶有一個搜索欄,您可以將其拉到內容上。 我要的是使用戶能夠在搜索欄上開始平移,而不管它是否處於活動狀態。

只要平移未在搜索欄的文本字段內開始,這項工作就可以單獨進行。 為了克服這個問題,我在搜索欄頂部放置了一個帶有手勢識別器的虛擬UIView遮罩,類似於this 但是,一旦我點擊並因此searchBar成為第一響應者,遮罩就會轉到背景並且不接受觸摸(請注意,我沒有在遮罩isHidden設置為false )。 返回平移的唯一方法是searchBarContainerView.bringSubview(toFront: theMask) 問題在於,除非searchBar辭職了第一響應者,否則這無效。 我嘗試將UIView子類化為容器,並將layoutSubviews更改為:

super.layoutSubviews()
if let searchBarMask = self.searchBarMask {
   bringSubview(toFront: searchBarMask)
}

但沒有效果。 有什么建議么? 如果有必要,我願意離開UIView-mask模式。

層次結構類似於:

  • UIView

    • ScrollView(內容)
    • ContainerView(上拉東西)
  • UIView(在上面的Container View中,在單獨的UIViewController中,將其命名為XController)

    • UIView-搜索占位符
    • UITableView

搜索欄在XController中添加為:

override func viewDidLoad() {
    self.controller = UISearchController(nil)
    self.searchPlaceholder.addSubview(self.controller.searchBar)
    ...
    self.mask = UIView(frame: self.controller.searchBar.frame)
    self.searchPlaceholder.insertSubview(self.mask, aboveSubview: self.controller.searchBar)
}

我最終做了類似的事情,如下。 我將UIView用作遮罩,但這一次它直接在搜索欄視圖中:

self.searchBar.addSubview(theMask)
self.searchBar.bringSubview(toFront: theMask)
// add pan gesture recogniser on theMask

我沒有任何隱藏/取消隱藏邏輯,並且效果很好。 存在一些問題,例如,您無法在“取消”按鈕上開始平移,而完全不理會在搜索字段上的點擊,但是我認為這與正確配置手勢識別有關。

暫無
暫無

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

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