【问题标题】:Why isn't my navigation bar controller handling the touchesEnded event on my navigation bar view?为什么我的导航栏控制器不处理导航栏视图上的 touchesEnded 事件?
【发布时间】:2013-01-02 19:06:12
【问题描述】:

This question 最接近描述我的问题,但我在一般过程中遗漏了一些东西,答案最终变成“没关系,我想出了一个未描述的不同解决方案”。

就我而言,我有一个带有导航栏及其控制器的 XIB。对于类字段,我已经填写了我的自定义类名。这是显示XIB的屏幕截图,因为我认为这应该是一个相对简单直接的设置......

我想要的(如开头的链接)是触发 touchesEnded 事件,以便我可以做一些事情。这适用于“视图”;我可以以编程方式写入事件,设置断点,然后查看断点是否被命中。但是,我更高级别的目标是在那时将一个新视图推送到应用程序上——这是我不应该在视图的功能中做的事情,而且我无论如何也做不到,因为我的视图无权访问导航控制器(除非我做了一些诡计来检索控制器,但我想干净利落地这样做)。

尽管它以编程方式为视图工作,但导航视图的控制器不会触发 touchesEnded 事件。我将它设置为委托,如下图所示,我怀疑这可能只是我需要做的一部分。

既然我已经设置了委托,并且已经看到 touchesEnded 事件被视图击中,为什么我的导航栏视图控制器没有接收到 touchesEnded 事件?我是不是弄错了,应该弄清楚如何从导航栏的视图中推送一个新视图,因为我已经看到 THAT touchesEnded 事件被击中了?这似乎是我应该在导航栏视图的控制器中处理的事情,但我无法获得该控制器的 touchesEnded 事件命中。

谢谢!

【问题讨论】:

  • 我认为您不了解导航控制器的工作原理。你为什么不解释你想要达到的目标?如果要推送到新控制器,通常通过属于导航控制器的视图中的按钮(或表格单元格)来完成。您无需直接对导航栏执行任何操作,而是由控制器处理。
  • 很可能就是这样。我想这样做,所以当我点击导航栏的一部分时,会推送一个新视图——就像这张图片中的 about 按钮可能会导致 (cdn2.raywenderlich.com/wp-content/uploads/2012/09/…)。不过,我不想显示按钮,而是希望它与背景图像齐平,并使用导航栏的触摸事件来开始此实现。我不能做与导航栏本身的按钮一样的事情吗?
  • 我不确定是否可以这样做(可能,但我从来没有那样做)。您推动新观点的原因是什么?
  • 好吧,我们想在导航栏中显示一个人的图片。当您点击您的图片时,会显示有关您作为用户的信息。这就是设计要求这样做的原因,但如果答案是“这是不可能的”或“为什么不应该以这种方式使用 XCode 有真正的基本架构原因,请改用右侧按钮”,我'愿意理解和传达这一点。一个带有人像的圆圈可能无法很好地解析为一个按钮,这就是为什么我只是在探索建立栏本身。

标签: objective-c ios uinavigationcontroller uinavigationbar touch-event


【解决方案1】:

从您的帖子中并不清楚,但您似乎明确地向您的应用添加了导航栏,是这样吗?如果您的控制器嵌入在导航控制器中,则无需这样做。您可以将视图添加到导航栏,并将 UIImage 视图添加为子视图。如果您将用户交互设置为开启,并在图像视图中添加点击手势识别器,您应该能够获得您想要的效果。

【讨论】:

  • 我有点庆幸我的帖子不清楚,因为我也不清楚,呵呵!如果可能的话,这是我正在修改以获得所需设计的预先存在的代码。感谢您指出此信息(正确)丢失,我知道我需要查看添加(或不添加)导航栏的位置,并可能从头开始重新执行以嵌入控制器。如果您知道比我的探索更能向我展示如何做到这一点的教程,请随时分享!
【解决方案2】:

然后你必须覆盖 UINavigationBar,并覆盖 becomeFirstResponder,返回 YES。

【讨论】:

  • 谢谢,我会开始研究那个方法。
  • 所以我的导航栏视图类确实是 UINavigationBar 的子类,因此覆盖 becomeFirstResponder 以返回 YES 非常简单。但是,即使进行了此更改,设置的委托也不会在点击/点击/等时点击 touchesEnded。
  • 不要设置任何委托,只需在同一个类中覆盖 touchesEnded:withEvent。
  • 有趣,所以这实际上是在视图而不是控制器中执行该功能?理论上,我知道这会起作用,但我想确保如果我在 MVC 设计模式中混合视图/控制器,我会隔离这个事件并且它不会延续到这个单一的方法。
  • 此更改导致在 UINavigationBar 派生类中调用 touchesEnded,但这已经发生。现在,作为 firstResponder,我如何管理推送到导航控制器上/弹出导航控制器的视图?另外:看起来覆盖 touchesEnded 使得后退按钮不再起作用。我认为在视图中执行此功能不会成功,因此...
猜你喜欢
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 2014-07-14
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多