长按UI元素(或如何确定按下哪个元素?)

时间:2012-01-05 21:05:50

标签: objective-c ios ipad uigesturerecognizer

我的应用程序在PDF格式中有一个相当大的帮助部分。对我来说,PDF是如此之大,我可以在仪器中告诉它对处理器造成了太大的压力,所以我要逐步淘汰它。

我想,一个较轻的实现将使用UILongPressGestureRecognizer,我可以附加到每个UI元素,这些元素将显示指定文本,可能是弹出框或UIMenuController,表示所选元素的功能。

所以我的问题是这样的:如何在视图中的每个元素上添加类似标签的内容,以便将其传递给单个方法?当我尝试标记时,我发现无法通过方法签名的(id)sender部分访问它,因此无法区分元素。

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

2 个答案:

答案 0 :(得分:1)

您可以通过 - (IBAction)xxxxxx:(id)发件人访问代码;像这样:

NSInteger tagValue = [sender tag];

但是为什么不能通过Interface Builder将操作连接到元素? 您在此处使用的UI元素是什么?

答案 1 :(得分:1)

您可以从作为发件人传入的对象派生标记。只需检查它的类并适当地投射它。 tagUIView属性,因此我们将从那里开始。

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

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