【问题标题】:Xcode 9 UIpageViewController causing subviews UIbuttons to have a delayed pressXcode 9 UIpageViewController 导致子视图 UIbuttons 有延迟按下
【发布时间】:2017-11-10 17:05:51
【问题描述】:

我遇到了一个问题,即我的 UI 按钮没有响应。通常我可以像往常一样点击它,但是当视图加载到 UIpageviewcontrol 中时,必须用力按下按钮才能得到响应。这是为什么?非常感谢

UIpageViewControl:

import UIKit

class mainPageViewController: UIPageViewController , 
UIPageViewControllerDelegate , UIPageViewControllerDataSource{


lazy var orderedViewControllers : [UIViewController] = {
    return [self.newVC(viewController: "messages"),
            self.newVC(viewController: "discover"),
            self.newVC(viewController: "profile")
    ]

}()

var pageControl = UIPageControl()

override func viewDidLoad() {
    super.viewDidLoad()
    self.dataSource = self;
    if let firstVC = orderedViewControllers.first{
        setViewControllers([firstVC],
                           direction: .forward,
                           animated: true,
                           completion: nil);
        self.delegate = self;

        // ads dots if i want later

        //configPageControl()
    }
    // Do any additional setup after loading the view.
}

func newVC(viewController: String ) -> UIViewController{
    return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: viewController);
}


func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
    let pageContentViewContoller = pageViewController.viewControllers![0];
    self.pageControl.currentPage = orderedViewControllers.index(of: pageContentViewContoller)!
}

func configPageControl(){
    pageControl = UIPageControl(frame: CGRect(x: 0, y: UIScreen.main.bounds.maxY - 50, width: UIScreen.main.bounds.width, height: 50))
    pageControl.numberOfPages = orderedViewControllers.count;
    pageControl.currentPage = 0;
    pageControl.tintColor = UIColor.white;
    pageControl.pageIndicatorTintColor = UIColor.white;
    pageControl.currentPageIndicatorTintColor = UIColor.red;
    self.view.addSubview(pageControl);
}


func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
    guard let  viewControllerIndex = orderedViewControllers.index(of : viewController)else{
        return nil;
    }

    let previousIndex = viewControllerIndex - 1;

    guard previousIndex >= 0 else{
        // infinatly swipe in a loop
        return orderedViewControllers.last;
        // no swipe back
        //return nil;
    }

    guard orderedViewControllers.count > previousIndex else{
        return nil;
    }

    return orderedViewControllers[previousIndex];
}


func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
    guard let  viewControllerIndex = orderedViewControllers.index(of : viewController)else{
        return nil;
    }

    let nextIndex = viewControllerIndex + 1;

    guard orderedViewControllers.count != nextIndex   else{

        // infinatly swipe in a loop
        return orderedViewControllers.first;
        // no swipe back
        //return nil
    }

    guard orderedViewControllers.count > nextIndex else{
        return nil;
    }

    return orderedViewControllers[nextIndex];
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
} 

ViewController 的按钮不正常

import UIKit

class ProfileViewController: UIViewController {

@IBOutlet weak var moneyOutlet: UILabel!
@IBOutlet weak var scoreOutlet: UILabel!
@IBOutlet weak var profilePicOutlet: UIImageView!
@IBOutlet weak var usernameOutlet: UILabel!
override func viewDidLoad() {
    super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

@IBAction func trophiesPressed(_ sender: Any) {
   // not triggering as expected
    print("hello world")
}

}

【问题讨论】:

    标签: ios iphone swift xcode uibutton


    【解决方案1】:

    尝试将此添加到您的 mainPageViewController 课程中:

    override func touchesShouldCancel(in view: UIView) -> Bool {
        if view is UIButton {
            return true
        }
        return super.touchesShouldCancel(in: view)
    }
    

    附带说明,类名使用前导大写,变量名和函数名使用前导小写:

    class MainPageViewController: UIPageViewController ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 2014-04-24
      相关资源
      最近更新 更多