UIButton延迟了状态变化

时间:2009-04-25 02:22:23

标签: iphone

我在UIButton内有UITableViewCell子视图。

触摸此按钮时,用户必须按住按钮约半秒钟才能将按钮的图像更改为UIControlStateHighlighted图像。

这意味着如果用户只是按照通常的情况点击按钮,则不会显示突出显示的状态。

为什么会发生这种情况,我该如何解决?

5 个答案:

答案 0 :(得分:25)

我刚遇到此问题,发现此问题尚未解决。拧了一会儿后,我找到了解决方法。

现在您可以通过关闭延迟内容套餐或取消选中桌面视图上的“延迟内容触摸”框来解决此问题。

唯一的负面影响是用户无法点按按钮并启动滚动手势。但是,如果用户尝试从本身不接受触摸的任何地方开始滚动,则行为应与之前相同。

答案 1 :(得分:11)

大卫霍奇的回答。

我只是想添加一种方法来删除David已经描述过的“唯一的负面影响”:如果你开始使用delayContentTouches = NO在UIScrollView中的UIcontrol内滚动,则滚动不起作用。

<强>解 子类UIScrollView(或UITableView作为原始问题)并覆盖:

-(BOOL) touchesShouldCancelInContentView:(UIView *)view {   
return YES; 
}

UIScrollView / UITableView中的UIControl将立即更改其状态,即使在某些UIControl上启动触摸,也可以滚动滚动视图。像魅力一样。

答案 2 :(得分:10)

问题是您的UIButton位于UITableView中。这意味着表格视图必须确定您的点按是否是滑动,或者它是否只是用于按钮的点击。表视图必须延迟向UIButton发送消息,直到它知道用户不打算滑动,因此滚动视图而不是按下按钮。

如果您不需要表视图,请删除UITableView。

答案 3 :(得分:3)

我只是在目标操作方法中更改图像:

[sender setBackgroundImage:[UIImage imageNamed:@"highlighted-image.png"] forState:UIControlStateNormal];

它会立即改变背景图像。

答案 4 :(得分:0)

编辑:在对问题的误解之后完全重写

一种思考UIButton的方法是作为设置屏幕区域的简便方法,该区域可以响应各种瞬时触摸事件,它所做出的响应由UIControl的Target-Action系统定义,用于将消息传递给其他对象。

UIControlEventTouchDown听起来就像你需要回应的那个。只要有人触摸您的按钮,它就会被触发 - 这就是SMS中的“联系信息”按钮。

UIButton * myButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect]; //设置标题,框架等 [myButton addTarget:self action:@selector(myButtonWasPressed)forControlEvents:UIControlEventTouchDown]; [myMainView addSubView:myButton];

将向此代码运行的对象发送-(void)myButtonWasPressed消息(理想情况下,您可以查看控制器)。在myButtonWasPressed中,您可以添加新视图或执行您喜欢的任何操作。 SMS应用程序按下视图控制器以使用导航控制器显示联系信息。

如果这仍然无法解决您的问题,那么您将不得不发布一些代码,以便更深入地了解出现了什么问题。