objective-c - iOS 将 tapGesture 添加到多个 View

标签 objective-c ios uiview ios4 uigesturerecognizer

我在主视图中定义了多个 View 。我想为所有这些 View 添加单击手势。下面是我编写的代码,但这会向我添加的最后一个 View 注册一个点击手势。所以在下面的代码中,tap 只为 messagesView 注册,而不为其他 View 注册。我有两个问题:

  1. 如何将同一个 tapGesture 注册到多个 View ?

  2. 假设我可以正常工作,现在这些 View 中的所有单击都会转到名为 oneTap 的相同函数。在这个函数中,我如何区分点击来自哪个 View ?

代码:

@synthesize feedsView, peopleView, messagesView, photosView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneTap:)];
    [singleTap setNumberOfTapsRequired:1];
    [singleTap setNumberOfTouchesRequired:1];
    [feedsView addGestureRecognizer:singleTap];
    [peopleView addGestureRecognizer:singleTap];
    [messagesView addGestureRecognizer:singleTap];
    //[photosView addGestureRecognizer:singleTap];
    [singleTap release];

    return;
}

最佳答案

我有同样的问题,它只添加到最后一个 View 。可能有更好的解决方案,但我只是为每个 View 创建了一个标记手势并将它们链接到相同的选择器方法(在您的情况下为 oneTap:)。为了区分哪个 View 激活了该方法,您可以只标记您的 View ,feedsView.tag = 0; peopleView.tag = 1; 等等。然后当方法被调用时:

- (void)oneTap:(UIGestureRecognizer *)gesture {
    int myViewTag = gesture.view.tag;  // now you know which view called
    // use myViewTag to specify individual actions;
}

关于objective-c - iOS 将 tapGesture 添加到多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6237693/

相关文章:

android - <hr> 标记在 ios 和 android 设备浏览器中不可见

ios - 如何修改 tableView 单元格内 UIView 的大小?

ios - 奇怪的 SQLite 行为。不同的结果;相同的查询

iphone - 热禁用 cocos2d 中 CCLayer 中的触摸处理

iphone - 代码: "uniqueIdentifier deprecated"

UIView 中的 IOS 线程无法释放

objective-c - 应用程序在Dealloc上崩溃

iphone - 使用延迟创建一个返回的方法

iphone - 转换点 :toView: in landscape mode giving wrong values

ios - 如果我使用比较对对象进行排序,如果其中一个对象为零,我该如何告诉它不进行排序?