【问题标题】:UIButton subview in UICollectionViewCell not changing control stateUICollectionViewCell 中的 UIButton 子视图不更改控件状态
【发布时间】:2013-05-03 19:22:25
【问题描述】:

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

【问题讨论】:

    标签: ios uibutton uicollectionview


    【解决方案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

    希望这会有所帮助!

    【讨论】:

    • 我尝试以编程方式将按钮设置为突出显示状态,但仍然无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    相关资源
    最近更新 更多