当你在UIScrollView中放置一个按钮时,通常会出现这种情况。UIScrollView有一个名为“delaysContentTouches”的属性,默认值为YES。如果它是YES,则按下按钮的触摸将被延迟(以便检查是否为滚动手势),因此您看不到突出显示的效果。尽管如此,如果您轻击它,则会注册为按钮按下,而不会被突出显示。
我不确定您的设置具体是什么,但似乎存在类似问题。检查涉及UI的任何gestureRecognizers,并检查“delaysTouchesBegan”和“delaysTouchesEnded”的值。
**经过实验后编辑**
我刚在iOS 7.0上尝试了一下,似乎可以解决这个问题。
-(void)viewDidAppear:(BOOL)animated {
NSArray *subviews = self.pageViewController.view.subviews;
NSArray *viewHierarchy = [@[self.pageViewController.view] arrayByAddingObjectsFromArray:subviews];
int i = 0;
for (UIView *viewToCheck in viewHierarchy) {
for (UIGestureRecognizer *gestureRecognizer in viewToCheck.gestureRecognizers) {
NSLog(@"%d gestureRecognizer: %@", i++, gestureRecognizer);
gestureRecognizer.delaysTouchesBegan = NO;
}
}
}
我得到了这个输出
0 gestureRecognizer: <UIScrollViewDelayedTouchesBeganGestureRecognizer: 0x8e9b510
1 gestureRecognizer: <UIScrollViewPanGestureRecognizer: 0x8e9ba10
<UIScrollViewPagingSwipeGestureRecognizer: 0x8e9bec0
}>
2 gestureRecognizer: <UIScrollViewPagingSwipeGestureRecognizer: 0x8e9bec0
<UIScrollViewPanGestureRecognizer: 0x8e9ba10
}>
其中揭示了一个UIScrollViewDelayedTouchesBeganGestureRecognizer,它似乎是为PageController定制的自定义识别器,旨在对你的按钮进行精确操作...
但是!将它的delaysTouchesBegan属性设置为NO,按钮高亮显示就会立即出现。希望这个方法也适用于你。
UIButtonTypeSystem
按钮吗?你配置了高亮状态吗?这个问题在新的隔离项目中可以重现吗? - vokilam