UIButton不是在iOS7中的UIPageViewController中的ViewController中突出显示

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,并在按下时立即显示按钮突出显示.希望对你也有用.


lon*_*ngi 1

  • 检查您在orUIButton中定义的状态(但既然您说它仅在 iOS7 中,那么应该不是问题)xibstoryboard

  • 检查在 IBAction 方法中单击后按钮的状态

  • 尝试在 IBAction 方法中设置您推荐的按钮状态

    yourButton.higlighted = YES;
    
    //or yourButton.selected = YES; setting selected state 
    
    Run Code Online (Sandbox Code Playgroud)