Как получить доступ к нескольким кнопкам из NSObject? - PullRequest
1 голос
/ 20 марта 2019

Я очень новичок в Swift и программировании в целом, поэтому терпите меня:

Я создал объект NSO для доступа к нескольким текстам и кнопкам.

import UIKit

class WelcomeScreen: NSObject {

var messageText: String?
var imageName: String?
var buttonName: UIButton?

static func sampleScreens() -> [WelcomeScreen] {

    let splitButton: UIButton = {
        let button = UIButton(type: .system)
        button.setTitle("Split", for: .normal)
        button.setTitleColor(.black, for: .normal)
        button.titleLabel?.font = UIFont(name: "IBMPlexSans", size: 25)
        button.translatesAutoresizingMaskIntoConstraints = false
        button.backgroundColor = UIColor(red: 241/255, green: 249/255, blue: 254/255, alpha: 1.0) /* #f1f9fe */
        button.layer.cornerRadius = 33
        button.layer.borderWidth = 1
        button.layer.borderColor = UIColor.black.cgColor
        button.tag = 0
        return button
    }()

    let playButton: UIButton = {
        let button = UIButton(type: .system)
        button.setTitle("Play", for: .normal)
        button.setTitleColor(.black, for: .normal)
        button.titleLabel?.font = UIFont(name: "IBMPlexSans", size: 25)
        button.translatesAutoresizingMaskIntoConstraints = false
        button.backgroundColor = UIColor(red: 241/255, green: 249/255, blue: 254/255, alpha: 1.0) /* #f1f9fe */
        button.layer.cornerRadius = 33
        button.layer.borderWidth = 1
        button.layer.borderColor = UIColor.black.cgColor
        button.tag = 1

        return button
    }()

    let splitScreen = WelcomeScreen()
    splitScreen.messageText = "It's simple, start splitting your bill"
    splitScreen.imageName = "SplitButton"
    splitScreen.buttonName = splitButton



    let otherScreen = WelcomeScreen()
    otherScreen.messageText = "Choose a random party member to pay for the whole meal"
    otherScreen.imageName = "PlayButton"
    otherScreen.buttonName = playButton

    return [splitScreen, otherScreen]
}

}

И здесь я получаю доступ к тексту и изображениям, но не могу получить доступ к кнопкам.

class ButtonCell: UICollectionViewCell {
var button: WelcomeScreen? {
    didSet {
        if let text = button?.messageText {
            descriptionText.text = text
        }
        if let imageName = button?.imageName{
            splitButtonView.image = UIImage(named: imageName)
        }
        splitButton = button?.buttonName
    }
}
override init(frame: CGRect) {
    super.init(frame: frame)
    setUpView()

}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

let splitButtonView: UIImageView = {
    let imageView = UIImageView(image: #imageLiteral(resourceName: "SplitButton"))

    //enables autolayout for our imageView
    imageView.translatesAutoresizingMaskIntoConstraints = false
    imageView.contentMode = .scaleAspectFit

    return imageView
}()


var splitButton: UIButton = {
    let button = UIButton(type: .system)
    button.setTitle("Split", for: .normal)
    button.setTitleColor(.black, for: .normal)
    button.titleLabel?.font = UIFont(name: "IBMPlexSans", size: 25)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.backgroundColor = UIColor(red: 241/255, green: 249/255, blue: 254/255, alpha: 1.0) /* #f1f9fe */
    button.layer.cornerRadius = 33
    button.layer.borderWidth = 1
    button.layer.borderColor = UIColor.black.cgColor

    return button

}()
let playButton: UIButton = {
    let button = UIButton(type: .system)
    button.setTitle("Play", for: .normal)
    button.setTitleColor(.black, for: .normal)
    button.titleLabel?.font = UIFont(name: "IBMPlexSans", size: 25)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.backgroundColor = UIColor(red: 241/255, green: 249/255, blue: 254/255, alpha: 1.0) /* #f1f9fe */
    button.layer.cornerRadius = 33
    button.layer.borderWidth = 1
    button.layer.borderColor = UIColor.black.cgColor

    return button
}()

private let descriptionText: UILabel = {

    let textLabel = UILabel()

    textLabel.text = "It's simple, start splitting your app"
    textLabel.font = UIFont(name: "IBMPlexSans-Light", size: 20)
    textLabel.translatesAutoresizingMaskIntoConstraints = false
    textLabel.textAlignment = .center
    textLabel.backgroundColor = .clear
    textLabel.textColor = UIColor.gray
    textLabel.lineBreakMode = .byWordWrapping
    textLabel.numberOfLines = 2


    return textLabel
}()
func setUpView(){
    backgroundColor = UIColor.clear


    addSubview(descriptionText)
    addSubview(splitButtonView)
    addSubview(splitButton)



    addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-30-[v0]-30-|", options: NSLayoutConstraint.FormatOptions(), metrics: nil, views: ["v0": descriptionText]))
    addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-30-[v0]-30-|", options: NSLayoutConstraint.FormatOptions(), metrics: nil, views: ["v0": splitButton]))
    addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-50-[v1(==70)][v0(==70)]-40-|", options: NSLayoutConstraint.FormatOptions(), metrics: nil, views: ["v0": splitButton, "v1": descriptionText]))

}  
}

В моей программе несколько ячеек, а разные тексты и изображения отображаются в разных ячейках. Я пытаюсь выяснить, как сделать так, чтобы мои кнопки отображались в разных ячейках. Вот скриншоты:

Первая страница Вторая страница

Надеюсь, я ясно дал это понять. Любая помощь приветствуется. Спасибо!

P.S. большая часть этого кода взята из различных быстрых руководств на YouTube.

1 Ответ

0 голосов
/ 20 марта 2019

Я думаю, что было бы лучше и проще создавать пользовательские ячейки представления коллекции, чем создавать пользовательский объект. За все время, что я разрабатывал для ios с помощью swift, мне приходилось только создавать экземпляры из NSObject при работе с целью c.

...