“保持”UIButton行为 - “触摸取消”控制状态阻止进一步控制状态

时间:2011-02-15 12:35:34

标签: iphone objective-c cocoa-touch ipad ios

我在子视图视图上有一个按钮(为了说话,子视图是一个红色方块),当用户按住按钮时,红色方块动画半透明。

我有按钮连接到此方法:

-(IBAction)peekToggle:(id)sendr{        

    NSLog(@"TOGGLE");

    if(self.view.alpha ==1)self.view.alpha = 0.1;   
    else self.view.alpha = 1;       
}

通过行为:touch up insidetouch up outsidetouch down。因此,当我按住按钮时,红色框会变为半透明状,当我松开手指时,它会返回不透明状态。 这最初工作正常,但如果按住按钮超过1秒,该按钮不会注册touch up(释放手指)。

注意:我在父视图上有一个longPressGestureRecogniser(子视图的父节点而不是Button的父节点),但它没有被触发(预期)。

我很确定我长按此按钮被注册为touch cancel,然后使补缺事件无效。

如何预防/解决此问题?

我可以停止touch Cancel开火吗? (即使我已经注册了控制状态,这个事件似乎也会触发)或者在touch Cancel事件中,告诉按钮保持/开始注册事件?

3 个答案:

答案 0 :(得分:3)

<强> SOLUTION:

完全删除了IBActions,并将UILongPressGestureRecognizer添加到按钮,持续时间非常短。

    UILongPressGestureRecognizer * recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];    
        recognizer.minimumPressDuration = 0.1;  
        [self.peekButton.view addGestureRecognizer:recognizer];
        [recognizer release];

然后在gr的选择器中,读取gr的状态:

    - (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer{ 

        //1 = start
        if(gestureRecognizer.state==1 || gestureRecognizer.state==3)[self peekToggle];
        //3=end
}

答案 1 :(得分:1)

如果您认为这是您的问题,可以尝试覆盖- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 并查看是否在那里进行任何活动。

答案 2 :(得分:1)

您可以使用UIGestureRecognizerDelegate界面在手势识别器被触发时进行微调。