【问题标题】:Subview passes touches to subview beneath it子视图将触摸传递给它下面的子视图
【发布时间】:2018-04-16 19:39:59
【问题描述】:

我添加了一个像这样的子视图:

func showPlayerView2() {
    self.view.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height - 56)
    //let theView = myView
    let theView = PlayerView()
    theView.willMove(toParentViewController: self.navigationController)
    self.navigationController?.addChildViewController(theView)
    theView.view.isUserInteractionEnabled = true
    theView.playPauseButton.isUserInteractionEnabled = true
    self.navigationController?.view.bringSubview(toFront: theView.view)
    self.navigationController?.view.addSubview(theView.view)
    theView.view.frame = CGRect(x: 0, y: self.view.frame.maxY, width: 375, height: 56)

    theView.didMove(toParentViewController: self.navigationController)
    self.view.layoutSubviews()
}

PlayerView 有一个按钮,按下时应该会在屏幕上打印一些东西。

即使在将isUserInteractionEnabled 设置为true 之后,它仍然不会注册触摸并且它们会传递到它下面的视图。我已经查看了几乎所有与此相关的 SO 问题,但没有一个答案有效。我该怎么做才能解决这个问题?

【问题讨论】:

  • 您是否要在视图中添加触摸手势?此外,您可以分享屏幕截图以获取更多信息。
  • 操纵导航控制器的子视图控制器、视图和子视图是完全非法的。很难同情您在这样做时可能遇到的任何问题。这段代码的目的是什么?
  • 我正在尝试向屏幕添加一个子视图,该子视图将保留在导航控制器上的所有屏幕中
  • @matt 有没有更有效的方法来解决这个问题?
  • “试图向屏幕添加一个子视图,该子视图将保留在导航控制器上的所有屏幕中”然后我认为这将是你要问/研究的问题,而不是错误道路,然后努力使其工作。这已经在这里被问过很多次了。例如看我的回答stackoverflow.com/a/40026622/341994

标签: ios swift uiview subview


【解决方案1】:

如果您正在寻找通用的自定义导航菜单,请尝试此代码

  func setupPageNavigationBar(){
        navigationController?.navigationBar.barTintColor = UIColor(red:1.00, green:0.22, blue:0.22, alpha:1.0)
        navigationController?.navigationBar.translucent = false

        let backButton = UIButton(type:.System)
        backButton.setImage(UIImage(named: "img_back")?.imageWithRenderingMode(.AlwaysOriginal), forState: .Normal)
        backButton.frame = CGRect(x: 0, y: 0, width: 30, height: 30)

        let imgButton = UIButton(type:.System)
        imgButton.setImage(UIImage(named: "img_logo_bar")?.imageWithRenderingMode(.AlwaysOriginal), forState: .Normal)
        imgButton.frame = CGRect(x: 0, y: 0, width: 40, height: 40)


        navigationItem.leftBarButtonItems  = [UIBarButtonItem(customView: backButton),UIBarButtonItem(customView:imgButton)]
        backButton.addTarget(self, action: #selector(self.goBack), forControlEvents: .TouchUpInside)

        let titleLabel = UILabel()
        titleLabel.text = "SOME TITLE"
        let titleLabel2 = UILabel()
        titleLabel2.text = "Some text"

        titleLabel.font = UIFont.boldSystemFontOfSize(15)
        titleLabel.textColor = UIColor.whiteColor()
        titleLabel.textAlignment = .Left

        titleLabel2.font = UIFont.systemFontOfSize(11)
        titleLabel2.textColor = UIColor.whiteColor()
        titleLabel2.textAlignment = .Left

        let titleView = UIView()
        titleView.frame = CGRect(x: 0, y: 0, width: view.frame.width-90, height: 50)
        //titleView.backgroundColor = UIColor.whiteColor()

        titleView.addSubview(titleLabel)
        titleLabel.translatesAutoresizingMaskIntoConstraints = false

        titleView.addSubview(titleLabel2)
        titleLabel2.translatesAutoresizingMaskIntoConstraints = false


        //titleLabel.frame = CGRect(x: 0, y: 0, width: 134, height: 34)


        let viewDict = ["titleLabel":titleLabel,"titleLabel2":titleLabel2]

        titleView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[titleLabel]-0-|", options: NSLayoutFormatOptions(), metrics: nil, views: viewDict))
        titleView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[titleLabel2]-0-|", options: NSLayoutFormatOptions(), metrics: nil, views: viewDict))

        titleView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-5-[titleLabel(20)]-0-[titleLabel2(15)]", options: NSLayoutFormatOptions(), metrics: nil, views: viewDict))

        //5+20+5+15+5
        navigationItem.titleView = titleView

        let homeButton = UIButton(type:.System)
        homeButton.setImage(UIImage(named: "img_home")?.imageWithRenderingMode(.AlwaysOriginal), forState: .Normal)
        homeButton.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
        navigationItem.rightBarButtonItem =  UIBarButtonItem(customView: homeButton)
        homeButton.addTarget(self, action:  #selector(self.gotoHome), forControlEvents: .TouchUpInside)
        //CGRectMake()



    }

在视图控制器中

override func viewDidLayoutSubviews()
    {

        self.setupPageNavigationBar()
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多