首页 文章

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

提问于
浏览
6

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

2 回答

  • 12

    UIScrollview (因此也是 UICollectionView )也有一个名为 delaysContentTouches 的属性,默认情况下它设置为YES,将其更改为NO并且您的按钮应该突出显示它应该如此 .

  • 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

    希望这可以帮助 !

相关问题