在 Swift 中使 NavigationBar 子视图可点击

Posted

技术标签:

【中文标题】在 Swift 中使 NavigationBar 子视图可点击【英文标题】:Making NavigationBar subview clickable in Swift 【发布时间】:2020-10-29 20:51:20 【问题描述】:

我在导航控制器中嵌入了一个视图控制器。该视图有 1 个WKWebView,因此,我将view = webView 设置为loadView() 覆盖。

因此,我在导航控制器下方添加了一个小的子导航栏,以允许用户更改其位置。我可以将子视图添加到导航控制器,但我无法使其可点击。

override func loadView() 
   let config = WKWebViewConfiguration()
   config.processPool = YourModelObject.sharedInstance.processPool
   webView = WKWebView(frame: .zero, configuration: config)
   webView.navigationDelegate = self
   self.webView.scrollView.delegate = self
   view = webView
   ..
   
   if let navigationBar = self.navigationController?.navigationBar 
      let secondFrame = CGRect(x: 50, y: 44.1, width: navigationBar.frame.width, height: 30)
      let secondLabel = UILabel(frame: secondFrame)
      secondLabel.textColor = .black
      secondLabel.text = "Getting your location..."
      secondLabel.isUserInteractionEnabled = true
      let guestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(setLocation(_:)))
      secondLabel.addGestureRecognizer(guestureRecognizer)
      secondLabel.textAlignment = .left
      secondLabel.font = secondLabel.font.withSize(14)
      secondLabel.tag = 1002
      navigationBar.addSubview(secondLabel)
   

然后是setLocation函数

@objc func setLocation(_ sender: Any) 
   print("location label tapped")

但是当我点击标签时,我没有在控制台中打印任何内容。我不知道 TapGestureRecognizer 使用 target: self 是错误的还是这里发生了什么。

【问题讨论】:

【参考方案1】:

我也是 Swift 的新手,所以我的答案远不能保证。我只知道在你的位置上是什么感觉,

也许尝试为子导航栏创建一个navigationBar的子类,即mySubNavigationBar。然后在子类的代码中做所有你需要做的初始化。包括打印线,以便您知道是否到达那里。

附言我会将此作为评论,但我没有足够的积分来添加 cmets。

【讨论】:

以上是关于在 Swift 中使 NavigationBar 子视图可点击的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中设置自定义 NavigationBar 的最简单方法是啥?

在swift中将navigationBar底部边框更改为虚线

SearchBar 和 NavigationBar 之间的空格 - Swift

Swift:裁剪没有 TabBar 和 NavigationBar 的屏幕截图

在pickerview(Swift 3,Xcode)中使(第一)行不可选择

如何在 Swift 中使 iPhone 状态栏透明?