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