UICollectionViewCell 中的 UIButton 子视图不更改控件状态
Posted
技术标签:
【中文标题】UICollectionViewCell 中的 UIButton 子视图不更改控件状态【英文标题】:UIButton subview in UICollectionViewCell not changing control state 【发布时间】:2013-05-03 19:22:25 【问题描述】:我有一个 UICollectionView,其中每个 UICollectionViewCell 都有一个 UIButton 作为子视图。 UIButtons 响应点击没有问题(它们的目标被触发),但按钮本身不会更改为选定状态(按钮的外观和感觉没有变化)。我有一种预感,这是因为 UICollectionViewCell 没有正确地将其触摸事件转发到按钮,但我不确定。即使是这样,在这种情况下,我该如何设置才能使按钮的状态正确更改?
【问题讨论】:
【参考方案1】:UIScrollview
(以及 UICollectionView
)有一个名为 delaysContentTouches
的属性,默认设置为 YES,将其更改为 NO 和你的按钮应该像它应该的那样突出显示。
【讨论】:
漂亮!工作完美。对于好奇,这里是关于该属性的相关文档:A Boolean value that determines whether the scroll view delays the handling of touch-down gestures. If the value of this property is YES, the scroll view delays handling the touch-down gesture until it can determine if scrolling is the intent. If the value is NO , the scroll view immediately calls touchesShouldBegin:withEvent:inContentView:. The default value is YES.
【参考方案2】:
如果我可以建议一个替代方案,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
希望这会有所帮助!
【讨论】:
我尝试以编程方式将按钮设置为突出显示状态,但仍然无效。以上是关于UICollectionViewCell 中的 UIButton 子视图不更改控件状态的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 UIButton 删除 UICollectionViewCell
无法使用 UICollectionVIewCell 数据加载 UIView
UICollectionViewCell 中的 Outlet 为零
UICollectionViewCell 中的 SwiftUI 视图