首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >‘'Hold’UIButton Behaviour‘`Touch’控件状态阻止进一步的控件状态

‘'Hold’UIButton Behaviour‘`Touch’控件状态阻止进一步的控件状态
EN

Stack Overflow用户
提问于 2011-02-15 20:35:34
回答 3查看 3.2K关注 0票数 1

我在一个子视图视图上有一个按钮(为了便于讨论,子视图是一个红色正方形),当用户按住该按钮时,红色正方形显示为半透明。

我有一个连接到此方法的按钮:

代码语言:javascript
复制
-(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,但它不会被触发(预期的)。

我非常确定我长时间按下按钮会被注册为touch cancel,然后使touch up事件失效。

我如何防止/解决这个问题?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-16 01:09:49

解决方案:

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

代码语言:javascript
复制
    UILongPressGestureRecognizer * recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];    
        recognizer.minimumPressDuration = 0.1;  
        [self.peekButton.view addGestureRecognizer:recognizer];
        [recognizer release];

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

代码语言:javascript
复制
    - (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer{ 

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

Stack Overflow用户

发布于 2011-02-15 20:46:44

如果你认为这是你的问题,你可以尝试重写- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event,看看你是否在那里得到了任何活动。

票数 1
EN

Stack Overflow用户

发布于 2011-02-15 22:01:06

当手势识别器被触发时,您可以使用UIGestureRecognizerDelegate接口进行微调。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5003719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档