UICollectionViewCell中的UIButton子视图不会改变控件状态

时间:2013-05-03 19:22:26

标签: ios uibutton uicollectionview

我有一个UICollectionView,其中每个UICollectionViewCell都有一个UIButton作为子视图。 UIButtons响应点击没有问题(他们的目标被触发),但按钮本身不会更改为选定状态(按钮的外观没有变化)。我有一个预感,因为UICollectionViewCell没有正确地将其触摸事件转发到按钮,但我不确定。即使是这样,我该如何设置以便在这种情况下按钮的状态正确改变?

2 个答案:

答案 0 :(得分:12)

UIScrollview(以及UICollectionView)也有一个名为delaysContentTouches的属性,默认设置为 YES ,将其更改为没有,你的按钮应突出显示它应该的。

答案 1 :(得分:0)

如果我可以提出替代方案,那么UICollectionView有一个很棒的委托方法叫做

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { }

可以处理对该单元格的点击...如果您正在寻找特定事件,例如看到图像更改为按钮状态,您可以在......按下按钮时进行硬编码一件事,当他们释放按钮做另一件事....

根据文件

UIControlStateSelected 选择控件的状态。对于许多控件,此状态对行为或外观没有影响。但是其他子类(例如,UISegmentedControl类)可能具有不同的外观,具体取决于其选择的状态。您可以通过selected属性检索和设置此值。

在外行人看来,对于UIButton来说,“选定国家”什么都不做......

如果按钮在点击时被假定为暗淡且它没有这样做,那么你可能必须以编程方式执行此操作,但是我不确定你要做什么......

调光功能处于突出显示状态

UIControlStateHighlighted 突出显示控件的状态。当跟踪期间触摸进入和退出以及有触摸事件时,控件进入此状态。您可以通过突出显示的属性检索和设置此值。

在外行语中,你触摸突出显示的按钮

看看按钮是否正确改变状态你可以做这样的事情

[button addTarget:self action:@selector(functionToCall:) forControlEvents:UIControlEventAllTouchEvents];

NSLog(@"Selected: %i", button.selected);
NSLog(@"Highlighted: %i", button.highlighted);
NSLog(@"Normal State or not: %i", button.state);

“当按钮发生任何类型的触摸时,将调用functionToCall,并且在该功能中你可以使用那3个NSLog,它们将向你的控制台输出不同的UIControlState值,这将显示按钮工作正常并显示它可能是一个UIViewCollection错误,如果它是UICollectionView ...那么你将不得不以编程方式调暗按钮:3

希望这有帮助!