2013-05-03 86 views
6

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

回答

12

UIScrollview(因此UICollectionView太)有一个名为delaysContentTouches属性,默认情况下它被设置为YES ,这种改变NO和你的按钮应突出像它应该。

+0

美丽!完美工作。为了好奇,下面是该属性的相关文档:一个布尔值,用于确定滚动视图是否延迟触摸手势的处理。 如果此属性的值为YES,那么滚动视图会延迟处理向下触摸手势,直到它可以确定滚动是否为意图。如果值为NO,滚动视图会立即调用touchesShouldBegin:withEvent:inContentView :.默认值是YES.' – 2013-10-24 03:01:48

0

如果我可以建议的替代方案,UICollectionView有称为真棒委托方法

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

可能处理click到该小区......如果你正在寻找特定事件发生就像看到的图像更改到按钮的状态,你可以硬编码在...当用户按下按钮做一两件事,当他们释放按钮做的另一件事....

根据文档以及

UIControlStateSe被选中 控件的选定状态。对于许多控件,这个状态对行为或外观没有影响。但其他子类(例如UISegmentedControl类)可能会根据其所选状态而有不同的外观。您可以通过选定的属性检索并设置此值。

在laymens方面。对于一个UIButton“选定国”什么也不做......

如果按钮是假设它的点击时变暗,并且它没有这样做,那么你可能不得不这样做如果编程,但我不完全知道你正在尝试做的...

调光功能与突出显示的状态

UIControlStateHighlighted 强调了控制的状态。当触摸进入和退出过程中以及触摸事件发生时,控件进入此状态。您可以通过突出显示的属性检索并设置此值。

在laymens方面

,你触摸它强调

按钮,看看是否按钮改变状态正常,你可以做这样的事情

[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将被调用时,任何类型的touch甚至发生在按钮上,并且在那个函数中你可以使用这3个NSLogs将打印到你的控制台的不同的UIControlState值,这将显示按钮工作正常,并显示它可能是一个UIViewCollection错误,如果它是UICollectionView ...然后您将不得不以编程方式调暗按钮:3

希望这有助于!

+0

我尝试以编程方式将按钮设置为突出显示的状态,但它仍然无效。 – 2013-05-05 01:20:51