我有一个 UICollectionView,其中每个 UICollectionViewCell 都有一个 UIButton 作为子视图。UIButtons 响应点击没有问题(它们的目标被触发),但按钮本身不会更改为选定状态(按钮的外观和感觉没有变化)。我有一种预感,这是因为 UICollectionViewCell 没有正确地将其触摸事件转发到按钮,但我不确定。即使是这样,我该如何设置,以便在这种情况下按钮的状态正确更改?
2 回答
(UIScrollview
因此UICollectionView
也有)有一个名为 的属性delaysContentTouches
,默认情况下它设置为YES,将其更改为NO并且您的按钮应该像它应该的那样突出显示。
如果我可以建议一个替代方案, UICollectionView 有一个很棒的委托方法,称为
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { }
它可以处理对该单元格的单击...如果您正在寻找发生的特定事件,例如看到图像更改为按钮的状态,您可以将其硬编码在...当他们按下按钮时做一件事,当他们释放按钮做另一件事....
根据文档以及
UIControlStateSelected 控件的选定状态。对于许多控件,此状态对行为或外观没有影响。但是其他子类(例如,UISegmentedControl 类)可能会根据它们选择的状态而具有不同的外观。您可以通过选定的属性检索和设置此值。
用外行的话..对于 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
希望这可以帮助 !