UIButton未在iOS7的UIPageViewController中的ViewController中高亮显示

UIButton未在iOS7的UIPageViewController中的ViewController中高亮显示,ios,ios7,uipageviewcontroller,Ios,Ios7,Uipageviewcontroller,我在视图控制器中有一个ui按钮,它嵌入在ui页面视图控制器中。页面视图控制器处于滚动模式(因此没有手势)。当我触摸按钮时,将调用action方法,但按钮没有可见的状态变化(突出显示的状态)。这意味着按钮看起来没动过。仅在iOS7中观察到。有什么办法吗 案例1:在普通ViewController中,按钮的行为有轻触和无轻触 案例2:在其中一个PageViewController的viewController中,按钮有无点击的行为 检查ui按钮在xib或情节提要中定义的状态(但既然您说它只在iO

我在视图控制器中有一个
ui按钮
,它嵌入在
ui页面视图控制器
中。页面视图控制器处于滚动模式(因此没有手势)。当我触摸按钮时,将调用action方法,但按钮没有可见的状态变化(突出显示的状态)。这意味着按钮看起来没动过。仅在iOS7中观察到。有什么办法吗

案例1:在普通ViewController中,按钮的行为有轻触和无轻触

案例2:在其中一个PageViewController的viewController中,按钮有无点击的行为

  • 检查
    ui按钮
    xib
    情节提要
    中定义的状态(但既然您说它只在iOS7中出现,那就不成问题了)

  • 选中,单击iAction方法后按钮的状态是什么

  • yourButton.higlighted = YES;
    
    //or yourButton.selected = YES; setting selected state 
    
    [button setSelected:YES];
    
  • 尝试在iAction方法中设置推荐按钮状态

    yourButton.higlighted = YES;
    
    //or yourButton.selected = YES; setting selected state 
    
    [button setSelected:YES];
    

当您在UIScrollView中放置按钮时,通常会发生这种情况。UIScrollView有一个名为“dalaysContentTouches”的属性,默认为YES。如果是,则按钮上的向下触摸将延迟(以便有时间检查是否为滚动手势),因此您不会看到高亮显示。尽管如此,如果你点击它,它将注册为一个按钮按下,而不会被突出显示

我不确定你的设置到底是什么,但这似乎是一个类似的问题。检查UI中涉及的任何手势识别器,并检查“delaysTouchesBegan”和“DelayStoucheSend”的值

**实验后编辑**

我刚刚在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; 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>)>>
    }>
0手势识别器:
1个手势识别器:
2手势识别器:
这显示了一个UIScrollViewDelayedTouchesBegangestureRecogener,它似乎是一个为页面控制器定制的识别器,专为您的按钮设计


但是!将其delaysTouchesBegan属性设置为“否”,按下按钮时按钮会立即高亮显示。希望这对您也有用。

同样的问题,我使用的是
UITableViewController
。我不确定它是否适用于
UIPageViewController
,但希望它能有所帮助

self.PageView.delaysContentTouches = NO;
在ViewController中:

for (id obj in self.View.subviews)
    {
        if ([NSStringFromClass([obj class]) isEqualToString:@"UITableViewCellScrollView"])
        {
            UIScrollView *scroll = (UIScrollView *) obj;
            scroll.delaysContentTouches = NO;
            break;
        }
    }

尝试使用与按钮关联的
iAction
方法中的代码将按钮状态设置为高亮显示

Button.higlighted = YES;
或者,在操作方法中单击按钮时,可以使用选定状态

yourButton.higlighted = YES;

//or yourButton.selected = YES; setting selected state 
[button setSelected:YES];

我不知道人们是否还会看到这篇文章,但我确实看到了,我花了很多时间试图找到一个解决方案,我终于找到了,所以对于那些有同样问题并在Swift工作的人来说,这对我很有用:

Swift 3.1:

override func viewDidLoad() {
    super.viewDidLoad()
    let views = view.subviews

    for view in views {

        if let scrollView = view as? UIScrollView {
            scrollView.delaysContentTouches = false
        }
    }
}

您是否使用
UIButtonTypeSystem
按钮?是否配置突出显示状态?这个问题在新的独立项目中是否可以重现?我们如何从UIPageViewController获取手势(对于滚动模式,手势是空的),它也不会暴露它正在使用的滚动视图。我想你可以在pageViewController.view中找到它?应该调用[super ViewDidDisplay:animated];