按钮在容器视图不能在第二个视图中工作
问题描述:
因此,我有2个视图,其中间有一个按钮。该按钮是对中心视图的约束。当我滑动到另一个视图时,该按钮移动到另一个视图上的第二个位置(可见)。我的问题是,我无法从我的其他视图访问按钮的功能,所以按钮不起作用。它与内容查看的创建:按钮在容器视图不能在第二个视图中工作
这是我的代码:
import UIKit
class MainVC: UIViewController {
let setupMainVC = SetupMainVC()
var rightViewXConstant : NSLayoutConstraint!
var leftViewXConstant : NSLayoutConstraint!
var arrowLeftXConstant : NSLayoutConstraint!
var centerViewXConstant : NSLayoutConstraint!
var rightViewOpen = false
var leftViewOpen = false
var windowSize = CGFloat()
override func viewDidLoad() {
super.viewDidLoad()
let window = UIWindow.init(frame: UIScreen.main.bounds)
window.makeKeyAndVisible()
view.backgroundColor = UIColor.clear
setupMainVC.mainVC = self
setupMainVC.setupViews()
windowSize = window.frame.size.width
setupLeftViewController()
setupCenterViewController()
navigationItem.title = "Center View"
self.setupMainVC.arrowButtonLeft.transform = CGAffineTransform(rotationAngle: 0)
arrowLeftXConstant.constant = 20
print(windowSize)
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Left", style: .plain, target: self, action: #selector(leftButAction))
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Right", style: .plain, target: self, action: #selector(rightButAction))
setupMainVC.arrowButtonLeft.addTarget(self, action: #selector(leftButAction), for: .touchUpInside)
NotificationCenter.default.addObserver(self, selector: #selector(leftButAction), name: NSNotification.Name("leftButtonAction"), object: nil)
}
func leftButAction() {
print("Left Action")
if leftViewOpen {
leftViewOpen = false
centerViewXConstant.constant = 0
leftViewXConstant.constant = 0
self.setupMainVC.arrowButtonLeft.transform = CGAffineTransform(rotationAngle: 0)
arrowLeftXConstant.constant = 20
navigationItem.title = "Center View"
print(false)
} else {
leftViewOpen = true
centerViewXConstant.constant = windowSize
leftViewXConstant.constant = windowSize
self.setupMainVC.arrowButtonLeft.transform = CGAffineTransform(rotationAngle: -179)
arrowLeftXConstant.constant = -20
navigationItem.title = "Left View"
print(true)
}
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}
}
func rightButAction() {
print("Right Action")
if rightViewOpen {
rightViewOpen = false
print(false)
} else {
rightViewOpen = true
print(true)
}
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}
}
func center() {
let center = CenterVC()
addChildViewController(center)
center.view.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(center.view)
centerViewXConstant = center.view.centerXAnchor.constraint(equalTo: center.view.centerXAnchor, constant: 0)
centerViewXConstant.isActive = true
center.view.centerYAnchor.constraint(equalTo: center.view.centerYAnchor).isActive = true
center.view.heightAnchor.constraint(equalTo: center.view.heightAnchor).isActive = true
center.view.widthAnchor.constraint(equalTo: center.view.widthAnchor).isActive = true
center.view.backgroundColor = .blue
center.didMove(toParentViewController: self)
}
//MARK: Center View
func setupCenterViewController() {
let controller = CenterVC()
addChildViewController(controller)
controller.view.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(controller.view)
controller.view.addSubview(setupMainVC.roundViewOnLeftView)
controller.view.addSubview(setupMainVC.arrowButtonLeft)
centerViewXConstant = controller.view.leftAnchor.constraint(equalTo: setupMainVC.leftView.rightAnchor, constant: 0)
centerViewXConstant.isActive = true
controller.view.centerYAnchor.constraint(equalTo: setupMainVC.leftView.centerYAnchor).isActive = true
controller.view.heightAnchor.constraint(equalTo: setupMainVC.leftView.heightAnchor).isActive = true
controller.view.widthAnchor.constraint(equalTo: setupMainVC.leftView.widthAnchor).isActive = true
setupMainVC.roundViewOnLeftView.centerXAnchor.constraint(equalTo: controller.view.leftAnchor).isActive = true
setupMainVC.roundViewOnLeftView.centerYAnchor.constraint(equalTo: controller.view.centerYAnchor).isActive = true
setupMainVC.roundViewOnLeftView.heightAnchor.constraint(equalToConstant: 100).isActive = true
setupMainVC.roundViewOnLeftView.widthAnchor.constraint(equalToConstant: 100).isActive = true
arrowLeftXConstant = setupMainVC.arrowButtonLeft.centerXAnchor.constraint(equalTo: setupMainVC.roundViewOnLeftView.centerXAnchor, constant: 20)
arrowLeftXConstant.isActive = true
setupMainVC.arrowButtonLeft.centerYAnchor.constraint(equalTo: setupMainVC.roundViewOnLeftView.centerYAnchor).isActive = true
setupMainVC.arrowButtonLeft.heightAnchor.constraint(equalToConstant: 100).isActive = true
setupMainVC.arrowButtonLeft.widthAnchor.constraint(equalToConstant: 100).isActive = true
controller.didMove(toParentViewController: self)
}
//MARK: Left View
func setupLeftViewController() {
let controller = LeftVC()
//let navBar: UINavigationController = UINavigationController(rootViewController: controller)
addChildViewController(controller)
controller.view.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(controller.view)
leftViewXConstant = controller.view.rightAnchor.constraint(equalTo: setupMainVC.centerView.leftAnchor, constant: 0)
leftViewXConstant.isActive = true
controller.view.centerYAnchor.constraint(equalTo: setupMainVC.centerView.centerYAnchor).isActive = true
controller.view.heightAnchor.constraint(equalTo: setupMainVC.centerView.heightAnchor).isActive = true
controller.view.widthAnchor.constraint(equalTo: setupMainVC.centerView.widthAnchor).isActive = true
controller.didMove(toParentViewController: self)
}
}
答
管理来解决该问题。总之,小事情是大麻烦。 它并没有因为这部分功能的工作:
controller.view.addSubview(setupMainVC.roundViewOnLeftView)
controller.view.addSubview(setupMainVC.arrowButtonLeft)
对于按钮的工作,它需要是的MainView(容器)的一个子视图所以这将是在像这样同一个视图层次:
view.addSubview(setupMainVC.roundViewOnLeftView)
view.addSubview(setupMainVC.arrowButtonLeft)