【问题标题】:Swift inheritance carrying over constraints继承约束的 Swift 继承
【发布时间】:2022-01-17 23:28:41
【问题描述】:

在下面的快速代码中,我尝试使用继承。当我去上课时,初始视图控制器上的约束仍在应用中。即使在中产阶级中我尝试将新的约束附加到右键,它们也没有被应用。您可以在下面的照片中看到问题所在。

import UIKit

class ViewController: UIViewController {
    
    var right = UIButton()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        [right].forEach{
            $0.translatesAutoresizingMaskIntoConstraints = false
            view.addSubview($0)
            $0.backgroundColor = UIColor(
                red: .random(in: 0.0...1),
                green: .random(in: 0.9...1),
                blue: .random(in: 0.7...1),
                alpha: 1
            )
        }
        
        NSLayoutConstraint.activate([

            right.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            right.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            right.heightAnchor.constraint(equalTo: view.heightAnchor,multiplier: 0.1),
            right.widthAnchor.constraint(equalTo: view.widthAnchor,multiplier: 1),
            
            
        ])
        right.setTitle(">", for: .normal)
        right.addTarget(self, action: #selector(nexte), for: .touchDown)
    }
    
    
    @objc func nexte(){
        
        let vc = middle()
        vc.modalPresentationStyle = .overCurrentContext // actually .fullScreen would be better
        self.present(vc, animated: true)
        
    }
    
}


class middle : ViewController{
    
    var leftbtn = UIButton()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        [leftbtn].forEach{
            $0.translatesAutoresizingMaskIntoConstraints = false
            view.addSubview($0)
            $0.backgroundColor = UIColor(
                red: .random(in: 0.0...1),
                green: .random(in: 0.9...1),
                blue: .random(in: 0.7...1),
                alpha: 1
            )
            
        }
        
        NSLayoutConstraint.activate([
            
            leftbtn.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            leftbtn.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            leftbtn.heightAnchor.constraint(equalTo: view.heightAnchor,multiplier: 0.1),
            leftbtn.widthAnchor.constraint(equalTo: view.widthAnchor,multiplier: 0.5 ),
            
            right.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            right.leadingAnchor.constraint(equalTo: leftbtn.trailingAnchor),
            right.heightAnchor.constraint(equalTo: view.heightAnchor,multiplier: 0.1),
            right.widthAnchor.constraint(equalTo: view.widthAnchor,multiplier: 0.5 ),
            
        ])
        
    }
}

【问题讨论】:

  • 我认为你需要多态性

标签: swift inheritance constraints viewdidload


【解决方案1】:

你在中间说super.viewDidLoad()super 是 ViewController 所以 ViewController 的 viewDidLoad 也会被执行。因此“当我去上课时,初始视图控制器上的约束仍在应用中”。

您应该在这里重新考虑您的整个架构。

【讨论】:

  • 我应该如何改变它有什么建议我只是在这里限制两件事。
  • 为什么你有一个视图控制器从另一个继承?正如我所说,重新考虑这一点。
  • 我试图在所有类中保留相同的对象。除了第一个类只有一个右页按钮,其余类将有一个左右页按钮
  • 好吧,我已经解释了问题的原因。要么接受,要么离开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多