【问题标题】:use loop to several subviews (swift4)对几个子视图使用循环(swift4)
【发布时间】:2023-12-28 14:34:02
【问题描述】:

我下面的代码是声明变量,然后将它们添加到视图子视图中,同时声明约束。我想看看是否有任何方法我可以将这段代码写得更短。使用 view.addSubview(imageA) 和 imageA.translatesAutoresizingMaskIntoConstraints = false 我想看看是否有任何方法可以添加所有的变量,所以它就像 imageA、text、textBackward.addSubview(theName)

var imageA = UIImageView()
var text = UILabel()
var theName = UILabel()
var textForward = UIButton()
var textBackward = UIButton()
var map = UIButton()
var settings = UIButton()

override func viewDidLoad() {     
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    view.addSubview(imageA)
    view.addSubview(text)

    view.addSubview(theName)
    view.addSubview(textForward)
    view.addSubview(textBackward)
    view.addSubview(map)
     view.addSubview(settings)

    imageA.translatesAutoresizingMaskIntoConstraints = false
    text.translatesAutoresizingMaskIntoConstraints = false
    textBackward.translatesAutoresizingMaskIntoConstraints = false
    settings.translatesAutoresizingMaskIntoConstraints = false
    theName.translatesAutoresizingMaskIntoConstraints = false
    map.translatesAutoresizingMaskIntoConstraints = false

    textForward.translatesAutoresizingMaskIntoConstraints = false
  }

【问题讨论】:

    标签: ios loops for-loop swift4 var


    【解决方案1】:

    您可以将所有子视图添加到数组中并像这样迭代

    [imageA,text,theName,textForward,textBackward,map,settings].forEach({
                $0.translatesAutoresizingMaskIntoConstraints = false
                self.view.addSubview($0)
            })
    

    【讨论】:

      【解决方案2】:

      对我来说,我喜欢将所有属性放到一个数组中,并使用每个闭包来设置调用闭包内的相同函数。

          var imageA = UIImageView()
          var text = UILabel()
          var theName = UILabel()
          var textForward = UIButton()
          var textBackward = UIButton()
          var map = UIButton()
          var settings = UIButton()
      
          lazy var collection = [imageA, text, theName, textForward, textBackward, map, settings]
      
          override func viewDidLoad() {
              super.viewDidLoad()
              // Do any additional setup after loading the view, typically from a nib.
      
              collection.forEach { (view) in
                  self.view.addSubview(view)
                  view.translatesAutoresizingMaskIntoConstraints = false
              }
          }
      

      如果有人使用故事板和插座也可以添加插座集合并链接您想要的所有视图。 outlet collection

      【讨论】: