Как правильно включить и отключить ограничение в одном контроллере вида по нажатию кнопки - PullRequest
0 голосов
/ 08 января 2020

У меня есть UIView на раскадровке как подпредставление ViewController, и у меня есть несколько полей в этом представлении, которые должны изменить свою позицию при нажатии кнопки. Поэтому я изменил, поэтому я сделал вывод для каждого FiledsView и дал им ограничения программно, но проблема в том, что они перекрываются и конфликтуют друг с другом, когда я нажимаю на другие кнопки.

Вот макет, который я хочу сделать Show

Здесь я помещаю все поля в другое представление

Show

Это код

import UIKit

class AddOfferTabViewController: UIViewController {

    @IBOutlet weak var formBaseView: UIView!
    @IBOutlet weak var titleFieldView: RoundView!
    @IBOutlet weak var descriptionView: RoundView!
    @IBOutlet weak var pointsView: RoundView!
    @IBOutlet weak var startEndDateStackView: UIStackView!
    @IBOutlet weak var maxCharLimitStackView: UIStackView!
    @IBOutlet weak var amountView: RoundView!

    @IBOutlet weak var textViewDescription: TextViewWithPlaceholder!
    @IBOutlet weak var textFieldAmount: UITextField!


    var buttonClicked:String!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tabBarController?.tabBar.isHidden = true

       // setupCashDiscountView(isLayoutActive: true)
        setupFreebeView(isLayoutActive: true)

    }


    @IBAction func addOfferButtonsActions(_ sender: UIButton) {

        switch sender.tag {
        case 1: //FreeBe
            print("Freebe")
            buttonClicked = "Freebe"
            setupCashDiscountView(isLayoutActive: false)
            setupPercentDiscountView(isLayoutActive: false)
            setupFreebeView(isLayoutActive: true)
        case 2: //Cash Discount
            print("Cash Discount")
            buttonClicked = "Cash"
            setupFreebeView(isLayoutActive: false)
            setupPercentDiscountView(isLayoutActive: false)
            setupCashDiscountView(isLayoutActive: true)

        case 3: //% Discount
            print("% Discount")
            buttonClicked = "percent"
            setupFreebeView(isLayoutActive: false)
            setupCashDiscountView(isLayoutActive: false)
            setupPercentDiscountView(isLayoutActive: true)
        default:
            print("there is something wrong")
        }

    }


    //MARK:Setup FreebeView
    func setupFreebeView(isLayoutActive:Bool){

        amountView.isHidden = true
        textViewDescription.placeholderText = "Any T&C"

        setupInputFields(fieldView: titleFieldView, topConstraints: formBaseView.topAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 8, height: 44, isActive: isLayoutActive) //Title Input Field
        setupInputFields(fieldView: descriptionView, topConstraints: titleFieldView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 95, isActive: isLayoutActive) //Description View
        setupMaxCharStackView(formStackView: maxCharLimitStackView, topConstraints: descriptionView.bottomAnchor, trailingSpace: 0, topSpace: 10, isActive: isLayoutActive) //Character Limit View

        setupInputFields(fieldView: pointsView, topConstraints: descriptionView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 40, height: 44, isActive: isLayoutActive) //PointsView

        setupStartEndDateStackView(formStackView: startEndDateStackView, topConstraints: pointsView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, isActive: isLayoutActive) //StartDate Endate



    }

    //MARK:Setup CashDiscount
    func setupCashDiscountView(isLayoutActive:Bool){

        amountView.isHidden = false
        textViewDescription.placeholderText = "Description"

        setupInputFields(fieldView: amountView, topConstraints: formBaseView.topAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 8, height: 44, isActive: isLayoutActive) //Amount View

        setupInputFields(fieldView: pointsView, topConstraints: amountView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 44, isActive: isLayoutActive) //Points View

        setupStartEndDateStackView(formStackView: startEndDateStackView, topConstraints: pointsView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, isActive: isLayoutActive) //StartDate Endate

         setupInputFields(fieldView: titleFieldView, topConstraints: startEndDateStackView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 44, isActive: isLayoutActive) //Title View

        setupInputFields(fieldView: descriptionView, topConstraints: titleFieldView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 95, isActive: isLayoutActive) //Description View

        setupMaxCharStackView(formStackView: maxCharLimitStackView, topConstraints: descriptionView.bottomAnchor, trailingSpace: 0, topSpace: 10, isActive: isLayoutActive) //Character Limit View


    }


    //MARK:Setup % Discount
    func setupPercentDiscountView(isLayoutActive:Bool){

        amountView.isHidden = false
        textViewDescription.placeholderText = "Description"

        setupInputFields(fieldView: amountView, topConstraints: formBaseView.topAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 8, height: 44, isActive: isLayoutActive) //Amount View

        setupInputFields(fieldView: pointsView, topConstraints: amountView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 44, isActive: isLayoutActive) //Points View

        setupStartEndDateStackView(formStackView: startEndDateStackView, topConstraints: pointsView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, isActive: isLayoutActive) //StartDate Endate

        setupInputFields(fieldView: titleFieldView, topConstraints: startEndDateStackView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 44, isActive: isLayoutActive) //Title View

        setupInputFields(fieldView: descriptionView, topConstraints: titleFieldView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 95, isActive: isLayoutActive) //Description View

        setupMaxCharStackView(formStackView: maxCharLimitStackView, topConstraints: descriptionView.bottomAnchor, trailingSpace: 0, topSpace: 10, isActive: isLayoutActive) //Character Limit View

    }

    //MARK: SetupInputFields function
    func setupInputFields(fieldView:UIView,topConstraints:NSLayoutAnchor<NSLayoutYAxisAnchor>,leadingSpace:CGFloat,trailingSpace:CGFloat,topSpace:CGFloat,height:CGFloat,isActive:Bool){
        fieldView.translatesAutoresizingMaskIntoConstraints = false //Make it false for working of constraints
        fieldView.topAnchor.constraint(equalTo: topConstraints,constant: topSpace).isActive = isActive
        fieldView.leadingAnchor.constraint(equalTo: formBaseView.leadingAnchor,constant: leadingSpace).isActive = isActive
        fieldView.trailingAnchor.constraint(equalTo: formBaseView.trailingAnchor,constant: trailingSpace).isActive = isActive
        fieldView.heightAnchor.constraint(equalToConstant: height).isActive = isActive
    //  fieldView.layoutIfNeeded()
    }

    //MARK: Setup MaxCharacter StackView function
    func setupMaxCharStackView(formStackView:UIStackView,topConstraints:NSLayoutAnchor<NSLayoutYAxisAnchor>,trailingSpace:CGFloat,topSpace:CGFloat,isActive:Bool){
        formStackView.translatesAutoresizingMaskIntoConstraints = false //Make it false for working of constraints
        formStackView.topAnchor.constraint(equalTo: topConstraints,constant: topSpace).isActive = isActive
        formStackView.trailingAnchor.constraint(equalTo: formBaseView.trailingAnchor,constant: trailingSpace).isActive = isActive
    }

    //MARK: Setup StartDate EndDate StackView function
    func setupStartEndDateStackView(formStackView:UIStackView,topConstraints:NSLayoutAnchor<NSLayoutYAxisAnchor>,leadingSpace:CGFloat? = nil,trailingSpace:CGFloat,topSpace:CGFloat,isActive:Bool){

        formStackView.translatesAutoresizingMaskIntoConstraints = false //Make it false for working of constraints
        formStackView.topAnchor.constraint(equalTo: topConstraints,constant: topSpace).isActive = isActive
        formStackView.leadingAnchor.constraint(equalTo: formBaseView.leadingAnchor,constant: leadingSpace!).isActive = isActive
        formStackView.trailingAnchor.constraint(equalTo: formBaseView.trailingAnchor,constant: trailingSpace).isActive = isActive

    }

}

1 Ответ

1 голос
/ 08 января 2020

Проблема заключается в том, что каждый раз, когда вы нажимаете кнопку 1, происходит запуск, который в конечном итоге вызывает setupInputFields и вызывает повторное добавление новых ограничений, которые могут конфликтовать со старыми, поэтому либо обращайтесь к старым ограничениям и удаляйте их, либо создайте 2 массива возможные варианты и играть с активировать / деактивировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...