ios - 将 UITapGestureRecognizer 添加到 UILabel 特定部分的最佳方法是什么?

标签 ios objective-c uilabel nsattributedstring uitapgesturerecognizer

这个问题可能已经问过几次了,但我仍在努力寻找最佳解决方案。带有 NSMutableAttributedString 的 addAttributes 将不起作用,因为我只能提供指向字符串一部分的链接。

我有一个带有字符串“已经注册?在这里登录”的标签。我可以获得文本“登录”的 NSRange,但是我怎样才能给它 UITapGesture 呢?我不想在这里使用 3rd 方库。请给我一些想法。谢谢

最佳答案

您无法将手势识别器添加到“UILabel 的一部分”。对于您的情况,我只使用两种不同的 UILabel:一种不可点击,上面写着“已经注册了?”,另一种是可点击的,上面写着“在这里登录”。老实说,我会将可点击部分放入 UIButton 中以使其清晰。另一种选择是将一个空的 UIView 作为 UILabel 的 subview ,使其成为您要点击的文本的大小。然后向该 subview 添加手势识别器。

(在我看来,开发人员在使用 iOS 时遇到的最大陷阱之一就是试图强制它以不同于设计的方式运行;比如模仿网络链接或其他东西。它总是效果最好,而且代码最少,当编写以利用其设计模式时)

所有点击位置的废话都可以忽略,因为这是识别器的重点。识别器会为您处理所有这些,并在点击 UIView 时使用您设置的操作来调用您的目标。

所以基本上是:

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:someObject action:@selector(someMethod:)];
[loginLabel addGestureRecognizer:tapRecognizer];

就是这样。剩下的就由系统为您处理。点击标签时将调用您的目标对象。至少,从原帖中描述的问题来看,这似乎很简单。如果还有其他复杂情况,请在您的问题中包含这些要点。

关于ios - 将 UITapGestureRecognizer 添加到 UILabel 特定部分的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38007222/

相关文章:

ios - 将一个 UIView 拖动到另一个 UIView 的边界上(带有圆角)

ios - 在另一个 UIViewController 中从 UiViewController 更改 UILabel 文本

swift - 字体 Luciest-Guy 未在 UILabel 中垂直居中

ios - 如何使 UITextView 布局文本与 UILabel 相同?

iphone - 许多 NSDictionary 的 NSArray。为给定键找到具有必要值的 NSDictionary 的最佳方法是什么?

ios - Swift 在 vi​​ewControllers 中使用 init

iphone - 如何在运行时确定二进制图像架构?

ios - GMSCameraUpdate 缩小到最大距离而不是围绕路径

ios - 如何在 iOS 中创建可缩放的时间线?

objective-c - 其他类中的 UIApplicationDelegate 函数