Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么不是';我的导航栏控制器是否正在处理导航栏视图上的touchesEnded事件?_Objective C_Ios_Uinavigationcontroller_Uinavigationbar_Touch Event - Fatal编程技术网

Objective c 为什么不是';我的导航栏控制器是否正在处理导航栏视图上的touchesEnded事件?

Objective c 为什么不是';我的导航栏控制器是否正在处理导航栏视图上的touchesEnded事件?,objective-c,ios,uinavigationcontroller,uinavigationbar,touch-event,Objective C,Ios,Uinavigationcontroller,Uinavigationbar,Touch Event,最接近于描述我的问题,但我在一般过程中遗漏了一些东西,最终答案是“没关系,我找到了一个没有描述的不同解决方案” 在我的例子中,我有一个带有导航栏和控制器的XIB。对于类字段,我已经填写了我的自定义类名。这是一个显示XIB的屏幕截图,因为我认为这应该是一个相对简单和直接的设置 我想要的(就像在开始的链接中一样)是触发touchesEnded事件,这样我就可以做点什么了。这适用于“视图”;我可以通过编程方式写入事件,设置断点,并看到断点被命中。然而,我更高层次的目标是在那个时候将一个新视图推到应用

最接近于描述我的问题,但我在一般过程中遗漏了一些东西,最终答案是“没关系,我找到了一个没有描述的不同解决方案”

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

我想要的(就像在开始的链接中一样)是触发touchesEnded事件,这样我就可以做点什么了。这适用于“视图”;我可以通过编程方式写入事件,设置断点,并看到断点被命中。然而,我更高层次的目标是在那个时候将一个新视图推到应用程序上——这是我不应该在视图的功能中做的,而且我无论如何也不能做,因为我的视图没有访问导航控制器的权限(除非我做了一些小动作来检索控制器,但我想干净利落地这样做)

即使它对视图以编程方式工作,但对于导航视图的控制器,touchesEnded事件不会被命中。我将其设置为代理,如下图所示,我怀疑这可能只是我需要做的一部分

既然我已经设置了代理,并且已经看到视图正在点击touchesEnded事件,为什么我的导航栏视图控制器没有在touchesEnded事件上拾取?我是不是搞错了,应该想想如何从导航栏的视图中推送一个新视图,因为我已经看到touchesEnded事件正在被点击?这似乎是我应该在导航栏视图的控制器中处理的事情,但我无法获得该控制器的touchesEnded事件命中


谢谢

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

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

我想您不了解导航控制器是如何工作的。你为什么不解释一下你想要实现什么?如果要推送到一个新的控制器,通常是通过视图中属于导航控制器的按钮(或表格单元格)来完成的。你不直接用导航栏做任何事情,控制器会处理它。很可能就是这样。我想这样做,当我点击导航栏的一部分时,一个新的视图被按下——很像这个图像中的about按钮可能导致()。不过,我不想显示一个按钮,而是希望它与背景图像齐平,并使用导航栏的触摸事件开始这个实现。我不能像导航栏上的按钮那样做吗?我不确定是否可以这样做(可能吧,但我从来没有这样做过)。您为什么要推到新视图的上下文是什么?我们想在导航栏中显示一个人的图片。当您点击图片时,会显示您作为用户的信息。这就是为什么设计需要这样做,但是如果答案是“这是不可能的”或者“对于XCode不应该以这种方式使用,确实有基本的架构原因,请使用右侧按钮”,我愿意理解并传达这一点。一个包含人物图片的圆圈可能无法很好地解析为一个按钮,这就是为什么我要探索如何简单地构建工具栏本身。谢谢,我将开始研究该方法。因此,我的导航栏视图类确实是UINavigationBar的子类,因此重写becomeFirstResponder以返回YES非常简单。但是,即使进行了此更改,set委托也不会在点击/单击/etc时点击touchesend。不要设置任何委托,只需在同一类中重写touchesend:withEvent。有趣的是,这实际上是在视图中而不是在控制器中执行该功能?理论上,我知道这会起作用,但我想确保,如果我将视图/控制器混合到MVC设计模式中,我会隔离此事件,并且不会超过此单一方法。此更改会导致在UINavigationBar派生类中调用touchesEnded,但这已经发生了。现在作为第一响应者,我如何管理推送到/弹出导航控制器的视图?另外:看起来覆盖touchesend使后退按钮不再工作。我不认为在视图中实现这个功能会飞起来,因为这个原因…我有点高兴我的帖子不清楚,因为我也不清楚,呵呵!这是预先存在的代码,如果可能的话,我正在修改它以获得所需的设计。感谢您指出此信息(正确)缺失,我知道我需要查看导航栏添加(或不添加)的位置,并可能从头开始重新执行以嵌入控制器。如果你知道一个比我的探索更好的教程,请随时分享!