【问题标题】:How to use delegate methods in a custom UISearchBar subclass如何在自定义 UISearchBar 子类中使用委托方法
【发布时间】:2021-08-15 03:38:03
【问题描述】:

我正在尝试创建自定义 UISearchBar,但在尝试使用 UISearchBar 的委托方法时遇到了问题。我正在使用以下代码,但它不起作用?我做错了什么?

class CustomSearchBar: UISearchBar, UISearchBarDelegate {
    
    var searchDelegate: UISearchBarDelegate

    init(del: UISearchBarDelegate) {
        self.searchDelegate = delegate
        super.init(frame: .zero)
        sizeToFit()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        print(searchText)
    }
}

【问题讨论】:

    标签: ios swift xcode delegates uisearchbar


    【解决方案1】:

    在尝试了几件事后,我想出了一种访问委托的方法。我用searchTextField.addTarget(self, action: #selector(searchBar(_:)), for: .editingDidEnd)。这允许我在 UISearchBar 中更改文本时进行访问。

    【讨论】:

      【解决方案2】:

      应该实现 UISearchBarDelegate 协议的类是 ViewController,您将在其中显示此搜索栏。在视图控制器中你会有这样的东西:

      class VC: UIViewController {
      
          let searchBar = CustomSearchBar()
      
          searchBar.delegate = self
      }
      
      extension VC: UISearchBarDelegate {
          func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
              print(searchText)
          }
      }
      

      【讨论】:

      • 我正在尝试创建一个自定义搜索栏,该搜索栏有一个显示的 tableview 并更改大小以根据键入的内容提供建议,这就是为什么我想知道文本更改的原因。使用 UISearchBarDelegate 不允许我这样做。有没有办法做到这一点而不在 UIViewController 中实现它?
      • 但是您的搜索栏和表格视图将在视图控制器中,对吧?
      • 是的,我想我在技术上可以在视图控制器中执行此操作,但如果我将其实现为自定义类会更容易实现多次
      猜你喜欢
      • 2014-11-02
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      相关资源
      最近更新 更多