UINavigationItem:检测触摸

Posted

技术标签:

【中文标题】UINavigationItem:检测触摸【英文标题】:UINavigationItem: detect touch 【发布时间】:2017-01-16 13:18:04 【问题描述】:

是否可以在 UINavigationItem检测 触摸

我想在用户点击 UINavigationItem 时创建一个小动画。

换句话说:

我的标题包含太多文本,因此我不得不截断它们 我希望用户在按下导航项时能够阅读完整的标题文本

为此,我需要:

    检测触摸 动画字符串/文本(我可以有一个计时器来动画这个,但是我想知道 iOS 中是否已经有一个内置函数 - 你知道吗?)

【问题讨论】:

UINavigationItem 不是 UIView 的子类,它直接继承自 NSObject(如 developer.apple.com/reference/uikit/… 所示)。因此,您不能按下它,因为它不是 UI 的可见元素。 请为您使用的语言添加标签。可能有帮助的相关问题:***.com/questions/26287322/… 和 ***.com/questions/2077025/uinavigationbar-touch 【参考方案1】:

UINavigationItem 直接继承自 NSObject,正如 johnryu 在 cmets 中所述,但您可以通过添加 UIView 代替标题来执行更复杂的操作,而不是在导航栏中显示标题。 这个视图可以由一个显示实际标题的 UILabel 和一个透明按钮组成。 透明按钮可以具有触发弹出窗口的操作,其中包含“触地”事件或“内部触地”的全文。 或者,您可以在该视图中添加一个简单的点击手势识别器。

【讨论】:

【参考方案2】:

尝试将自定义 titleView 分配给 UINavigationItem。使它成为一个带有标签的 UIView,您将在其中包含文本。在默认状态下,标签的大小与其父视图相同。确保 UIView 已将 clipsToBounds 设置为 YES/true。

将 UITapGestureRecognizer 附加到标签或视图以切换到“动画”状态并返回。

当进入动画状态时,使标签足够宽以有足够的空间容纳整个字符串并动画其在容器内的移动,可以使用 NSString 的boundingRectWithSize:options:attributes:context: 来计算合适的宽度。

然后只需添加一个动画,其中标签向左移动直到其右端可见,如果它重复可能最好。

【讨论】:

是否可以将 UIView 添加到 UINavigationItem? 不,您可以将新的 UIView(作为子视图)添加到另一个 UIView。 UINavigationItem 不是 UIView。

以上是关于UINavigationItem:检测触摸的主要内容,如果未能解决你的问题,请参考以下文章

检测长按 UINavigationItem 的后退按钮

UINavigationItem barButtonItem customView 检测其他项目然后设置宽度

如何检测 UIView 上的触摸并检测单击哪个 UIView 类似于 UIButton 上的触摸?

触摸屏物体识别到底是怎么实现的

如何检测iCarouselButtonDemo的触摸点?

苹果手机。在一个手指触摸屏幕时检测另一个手指触摸