objective-c - 长按 UI 元素(或如何确定按下的是哪个元素?)

标签 objective-c ios ipad uigesturerecognizer

我有一个应用程序有一个相当大的 PDF 格式的帮助部分。我发现 PDF 太大了,我可以从仪器中看出它给处理器带来了太多压力,所以我打算逐步淘汰它。

我想,一个更简单的实现是使用 UILongPressGestureRecognizer,我可以将它附加到每个 UI 元素,这些元素可能会在弹出窗口或 UIMenuController 中显示指定的文本,指示所选元素的功能。

所以我的问题是:如何将标签之类的东西附加到 View 中的每个元素,以便它可以传递给单个方法?当我尝试标记时,我发现无法通过方法签名的 (id)sender 部分访问它,因此无法区分元素。

编辑:对下面的人:虽然你已经解决了我关于确定 View 标签的问题,但如何将手势识别器附加到 UIBarButtonItem 以确定它的标签?您的实现允许使用非常讨厌的无法识别的选择器,因为 UIGestureRecognizers 没有标记属性。

最佳答案

您可以从作为发件人传入的对象派生标签。只需要检查它的类并适本地转换它。 tag 是一个 UIView 属性,所以我们将从那里开始。

- (void)someMethod:(id)sender
{
    if (![sender isKindOfClass:[UIView class]])
        return;

    UIView *senderView = (UIView *)sender;
    NSInteger tag = senderView.tag;
}

关于objective-c - 长按 UI 元素(或如何确定按下的是哪个元素?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8749809/

相关文章:

ios - CATextLayer 文本字体随着文本大小的增加而消失

javascript - 在 iPad 上播放 HTML5 视频并寻找

ios - 如何从 applicationDidBecomeActive 调用 viewDidLoad

ios - 如何将参数值传递给自定义 NSLOG

ios - 我可以同时安装现成销售和 Beta 试飞版本吗?

ios - 过渡期间导航栏右侧的 UI 故障(黑色闪烁)

ios - 如何从 UIViewcontroller 的弹出窗口中的 UItableview 中填充数据?

iphone - 需要帮助使用自定义对象对 NSMutableArray 进行排序

iPad 上的 Javascript 加载缓慢

ios - 获取 UIPickerView 当前选中的值