UICollectionViewCell中的UIButton子视图没有改变控件状态



我有一个UICollectionView其中每个UICollectionViewCell有一个UIButton作为子视图。uibutton响应点击没有问题(他们的目标被触发),但是按钮本身不会改变到选择状态(按钮的外观和感觉没有改变)。我有一种预感,这是因为UICollectionViewCell没有正确地转发它的触摸事件到按钮,但我不确定。即使是这样,我如何设置以便在此场景中按钮的状态正确更改呢?

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

如果我可以建议一个替代方法,UICollectionView有一个很棒的委托方法叫做

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { }

可以处理点击到那个单元格…如果你正在寻找特定的事件发生,如看到一个图像改变按钮的状态,你可以硬编码…当他们按下按钮做一件事,当他们释放按钮做另一件事....

根据文档

UIControlStateSelected控件的选定状态。对于许多控件,这种状态对行为或外观没有影响。但是其他子类(例如,UISegmentedControl类)可能有不同的外观,这取决于它们的选择状态。您可以通过所选属性检索和设置此值。

通俗地说…对于UIButton,"Selected State"不做任何事情…

如果按钮应该在点击时变暗,而不是这样做,那么你可能必须以编程方式做到这一点,但我不确定你想做什么…

调光功能在高亮状态

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个nlog将打印到你的控制台不同的UIControlState值,这将显示按钮正在正常工作,并显示它可能是一个UIViewCollection错误,如果它是UICollectionView…然后你必须通过编程使按钮变暗:3

最新更新