【问题标题】:How to create multiple views by looping in UIKit?如何通过在 UIKit 中循环创建多个视图?
【发布时间】:2021-05-31 00:58:53
【问题描述】:

我想创建多个文本字段。
而不是做

let textfield1 = SecondTextfieldView()
let textfield2 = SecondTextfieldView()
let textfield3 = SecondTextfieldView()
let textfield4 = SecondTextfieldView()
let textfield5 = SecondTextfieldView()
let textfield6 = SecondTextfieldView()
let textfield7 = SecondTextfieldView()
let textfield8 = SecondTextfieldView()
let textfield9 = SecondTextfieldView()
let textfield10 = SecondTextfieldView()
let textfield11 = SecondTextfieldView()
let textfield12 = SecondTextfieldView()
let textfield13 = SecondTextfieldView()
let textfield14 = SecondTextfieldView()
let textfield15 = SecondTextfieldView()
let textfield16 = SecondTextfieldView()
let textfield17 = SecondTextfieldView()
let textfield18 = SecondTextfieldView()
let textfield19 = SecondTextfieldView()
let textfield20 = SecondTextfieldView()

我想循环播放它——让它简短而甜美。我如何在 UIkit (Swift) 中做到这一点?
***** 不在 SWIFTUI 中 *****

【问题讨论】:

  • 为什么在标签的帮助下尝试使用 tableview

标签: ios swift uiview uikit


【解决方案1】:

试试这个代码:

创建堆栈视图以添加所有多个视图

let stackView = UIStackView.init()
        stackView.spacing = 2
        stackView.distribution = .fillProportionally
        stackView.axis = .vertical
        self.view.addSubview(stackView)
        stackView.translatesAutoresizingMaskIntoConstraints = false
        stackView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 20).isActive = true
        stackView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: 20).isActive = true
        stackView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 20).isActive = true
        stackView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -20).isActive = true

像这样创建子视图的创建循环:

for i in 0 ... 9 { // create 10 UIView
        let view = UIView.init()
        view.backgroundColor = colors[i] // sample color for see diffrence
        
        // insert to stackView or etc for showing
        stackView.addArrangedSubview(view)
    }

创建分配给子视图的数组颜色:

var colors: [UIColor] = [.red, .black ,.blue,.green, .yellow, .brown, .red, .blue, .yellow, .brown]

输出

【讨论】:

    【解决方案2】:

    这是我在之前的项目中使用的一些示例代码:

        private enum Feature: String {
        case intro
        case account
    
        var selector: Selector {
            switch self {
            case .intro: return #selector(navigateToIntro)
            case .account: return #selector(navigateToAccount)
            }
        }
    }
    
    override func loadView() {
        let views = createButtons(for: .intro, .account)
        view = createStackView(with: views)
    }
    
    private func createButtons(for features: Feature...) -> [UIView] {
        features.map {
            let button = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 10))
            button.setTitleColor(.systemBlue, for: .normal)
            button.setTitle($0.rawValue.capitalized, for: .normal)
            button.accessibilityIdentifier = $0.rawValue
            button.addTarget(self, action: $0.selector, for: .touchUpInside)
            return button
        }
    }
    
    private func createStackView(with subViews: [UIView]) -> UIStackView {
        let stackView = UIStackView(arrangedSubviews: subViews)
        stackView.axis = .vertical
        stackView.distribution = .fillEqually
        stackView.alignment = .fill
        stackView.spacing = 10
        stackView.translatesAutoresizingMaskIntoConstraints = false
        return stackView
    }
    

    它的设计目的是让您可以将项目放在顶部的枚举中并在 loadView() 中遍历它们,但您也可以使用 viewDidLoad() 来设置它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 2011-08-04
      相关资源
      最近更新 更多