Ani*_*ese 16 ios uipageviewcontroller ios7
我有一个UIButton
嵌入在一个视图控制器内UIPageViewController
.页面视图控制器处于滚动模式(所以没有手势).当我触摸按钮时,将调用操作方法,但按钮不会发生可见的状态更改(突出显示状态).这意味着按钮看起来没有动过.仅在iOS7中观察到.有什么解决方法吗?
案例1:在普通ViewController中使用和不使用Tap的Button的行为
案例2:在其中一个PageViewController的viewController中,使用和不使用Tap的Button的行为
dev*_*vid 14
当您在UIScrollView中放置一个按钮时,通常会发生这种情况.UIScrollView有一个名为"dalaysContentTouches"的属性,默认为YES.如果是,则按钮上的触摸将被延迟(以便有时间检查它是否是滚动手势),因此您将看不到突出显示.不过,如果点击它,它会注册为按钮按下,而不会突出显示.
我不是肯定你的设置是什么,但它似乎是一个类似的问题.检查UI中涉及的任何gestureRecognizer,并检查"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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了这个输出
0 gestureRecognizer: <UIScrollViewDelayedTouchesBeganGestureRecognizer: 0x8e9b510; state = Possible; delaysTouchesBegan = YES; view = <_UIQueuingScrollView 0x9b7f800>; target= <(action=delayed:, target=<_UIQueuingScrollView 0x9b7f800>)>>
1 gestureRecognizer: <UIScrollViewPanGestureRecognizer: 0x8e9ba10; state = Possible; delaysTouchesEnded = NO; view = <_UIQueuingScrollView 0x9b7f800>; target= <(action=handlePan:, target=<_UIQueuingScrollView 0x9b7f800>)>; must-fail = {
<UIScrollViewPagingSwipeGestureRecognizer: 0x8e9bec0; state = Possible; view = <_UIQueuingScrollView 0x9b7f800>; target= <(action=_handleSwipe:, target=<_UIQueuingScrollView 0x9b7f800>)>>
}>
2 gestureRecognizer: <UIScrollViewPagingSwipeGestureRecognizer: 0x8e9bec0; state = Possible; view = <_UIQueuingScrollView 0x9b7f800>; target= <(action=_handleSwipe:, target=<_UIQueuingScrollView 0x9b7f800>)>; must-fail-for = {
<UIScrollViewPanGestureRecognizer: 0x8e9ba10; state = Possible; delaysTouchesEnded = NO; view = <_UIQueuingScrollView 0x9b7f800>; target= <(action=handlePan:, target=<_UIQueuingScrollView 0x9b7f800>)>>
}>
Run Code Online (Sandbox Code Playgroud)
它显示了一个UIScrollViewDelayedTouchesBeganGestureRecognizer,它似乎是PageController的自定义识别器,旨在完全按照你的按钮...
但!将delayedTouchesBegan属性设置为NO,并在按下时立即显示按钮突出显示.希望对你也有用.
检查您在orUIButton
中定义的状态(但既然您说它仅在 iOS7 中,那么应该不是问题)xib
storyboard
检查在 IBAction 方法中单击后按钮的状态
尝试在 IBAction 方法中设置您推荐的按钮状态
yourButton.higlighted = YES;
//or yourButton.selected = YES; setting selected state
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
2318 次 |
最近记录: |