我如何在生成的视图中更改约束?

时间:2015-10-05 14:31:05

标签: ios swift uiview

功能" vypis_tabulky"将新UIView添加到UIView" tabulka"多次。 self.vyska对于下一个UIView

来说更大
@IBAction func vypis_tabulky(sender: AnyObject) {

        let subView = UIView()
        subView.backgroundColor = UIColor(red: 135/255, green: 222/255, blue: 212/255, alpha: 1)
        // add subview before adding constraints
        self.tabulka.addSubview(subView)



        // essential to apply NSLayoutConstraints programatically
        subView.translatesAutoresizingMaskIntoConstraints = false

        // trailing margin constraint
        let const1 = NSLayoutConstraint(item: subView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 120)
        // top constraint
        let const2 = NSLayoutConstraint(item: subView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem:self.tabulka, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: self.vyska)
        // bottom constraint
        let const3 = NSLayoutConstraint(item: subView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem:nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 120)
        // leading margin constraint
        let const4 = NSLayoutConstraint(item: subView, attribute: NSLayoutAttribute.LeadingMargin, relatedBy: NSLayoutRelation.Equal, toItem:self.tabulka, attribute: NSLayoutAttribute.LeadingMargin, multiplier: 1, constant: 20)
            const2.identifier = "ahoj"

        let klik = UITapGestureRecognizer(target: self, action: "klik_na_polozku_tabulce:")
        subView.addGestureRecognizer(klik)

        subView.tag = self.tag_view

        self.tag_view++
        NSLayoutConstraint.activateConstraints([const1, const2, const3, const4])
     self.vyska = 100+self.vyska
    }

我为每个生成的gestureRecognizer添加了UIView with action / funct" klik_na_polozku_tabulce:"

func klik_na_polozku_tabulce(target: UIGestureRecognizer){}

在此函数中,我想要点击UIView的编辑约束。

1 个答案:

答案 0 :(得分:0)

将每个视图和约束的ref存储在Global Array

var ViewArray: [UIView] = [UIView]()
var ConstWidthArray: [NSLayoutConstraint] = [NSLayoutConstraint]()
var ConstTopArray: [NSLayoutConstraint] = [NSLayoutConstraint]()
var ConstHeightArray: [NSLayoutConstraint] = [NSLayoutConstraint]()
var ConstLeadingMarginArray: [NSLayoutConstraint] = [NSLayoutConstraint]()

在创建它们时,将它们添加到这些数组

@IBAction func vypis_tabulky(sender: AnyObject) {

    let subView = UIView()
    subView.backgroundColor = UIColor(red: 135/255, green: 222/255, blue: 212/255, alpha: 1)
    // add subview before adding constraints
    self.tabulka.addSubview(subView)

    // ADD-------------------------
    ViewArray.append(subView)


    // essential to apply NSLayoutConstraints programatically
    subView.translatesAutoresizingMaskIntoConstraints = false

    // trailing margin constraint
    let const1 = NSLayoutConstraint(item: subView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 120)
    // top constraint
    let const2 = NSLayoutConstraint(item: subView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem:self.tabulka, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: self.vyska)
    // bottom constraint
    let const3 = NSLayoutConstraint(item: subView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem:nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 120)
    // leading margin constraint
    let const4 = NSLayoutConstraint(item: subView, attribute: NSLayoutAttribute.LeadingMargin, relatedBy: NSLayoutRelation.Equal, toItem:self.tabulka, attribute: NSLayoutAttribute.LeadingMargin, multiplier: 1, constant: 20)
        const2.identifier = "ahoj"

    ConstWidthArray.append(const1)
    ConstTopArray.append(const2)
    ConstHeightArray.append(const3)
    ConstLeadingMarginArray.append(const4)

    let klik = UITapGestureRecognizer(target: self, action: "klik_na_polozku_tabulce:")
    subView.addGestureRecognizer(klik)

    subView.tag = self.tag_view

    self.tag_view++
    NSLayoutConstraint.activateConstraints([const1, const2, const3, const4])
 self.vyska = 100+self.vyska
}

触发手势时,会将其视图与ViewArray中的视图进行比较,然后调整约束。

func klik_na_polozku_tabulce(target: UIGestureRecognizer){
    let viewKliked: UIView = target.view
    for index in 0..<ViewArray.count {
        if viewKliked === ViewArray[index] {
            //adjust constraints
            ConstWidthArray[index].constant = 99
            ConstTopArray[index].constant = 99
            ConstHeightArray[index].constant = 99
            ConstLeadinMarginArray[index].constant = 99
        }
    }
}

只要确保您释放生成的视图的任何位置,就会在释放之前删除ViewArray中该视图的ref以及所有Arrays的约束。

相关问题