如何将手势识别器分配给集合?

时间:2014-08-17 18:19:14

标签: objective-c ios7 uigesturerecognizer iboutletcollection

我的目标是简单地将正确的button.titleLabel.text发送到我的视图控制器的handleLongPress函数。这是我的功能:

- (IBAction)handleLongPress:(UILongPressGestureRecognizer *)sender {
    UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
                                          initWithTarget:self action:@selector(handleLongPress:)];
    lpgr.minimumPressDuration = 1.0;
    [self setUserIntendsToChangeUIsoTheUIisLockedUntilUserSelection:YES];
    NSLog(@"sender? %@", sender);
    if ([sender.view isKindOfClass:[UIButton class]]) {
        self.myButton = (UIButton *)sender.view;
        NSLog(@"!!!!! %@", self.myButton.titleLabel.text);
        [self.view addSubview:self.scrollPickerView];     
    }

}

这是我的故事板,我创建了一个按钮“H”,“Cl”,“C”等的引用插座集合。

enter image description here

每个按钮都会响应UILongPressGesture,但是记录的消息NSLog(@"!!!!! %@", self.myButton.titleLabel.text);始终引用相同的UIButton“C”,即使我按住了不同的按钮。我做错了什么?如何让每个按钮将其标题发送到handleLongPress函数?

1 个答案:

答案 0 :(得分:1)

我之前遇到过这种情况。在Interface Builder中,您只有1 UILongPressGestureRecognizer。每个视图都需要单独的UILongPressGestureRecognizer个。您应该在Interface Builder中看到的是底栏上的一长排UILongPressGestureRecognizer图标。

作为旁注:

    UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
                                          initWithTarget:self action:@selector(handleLongPress:)];
    lpgr.minimumPressDuration = 1.0;

是浪费的代码。您创建一个新变量并且不对其执行任何操作。