2017-07-22 74 views
0

我試圖使用infoView,它在信息按鈕上點擊一次即可打開。見圖片:Swift - 以編程方式爲特定視圖添加/刪除約束

enter image description here

我想InfoView中使其垂直按下按鈕排列。 我有一個UIbutton集合。 這裏是我的代碼:

@IBOutlet var infoButtons: [UIButton]! 

@IBAction func infoButtonPressed(_ sender: UIButton) { 
    var alignYConstraint = NSLayoutConstraint() 
    switch sender.tag { 
    case 1: 
     alignYConstraint = NSLayoutConstraint(item: infoView, attribute: .centerY, relatedBy: .equal, toItem: infoButtons[0], attribute: .centerY, multiplier: 1.0, constant: 0) 
     NSLayoutConstraint.activate([alignYConstraint]) 
     infoView.isHidden = false 
     infoView.textView.text = "Text goes here" 
     infoView.onClickCallback = { 
      self.infoView.isHidden = true 
      //     self.infoView.removeFromSuperview() 
      NSLayoutConstraint.deactivate([alignYConstraint]) 
     } 
    case 2: 
     alignYConstraint = NSLayoutConstraint(item: infoView, attribute: .centerY, relatedBy: .equal, toItem: infoButtons[1], attribute: .centerY, multiplier: 1.0, constant: 0) 
     NSLayoutConstraint.activate([alignYConstraint]) 
     infoView.isHidden = false 
     infoView.textView.text = "Different text" 
     infoView.onClickCallback = { 
      self.infoView.isHidden = true 
      NSLayoutConstraint.deactivate([alignYConstraint]) 
     } 
    .................... 
    } 
} 

我有兩個問題:

1)如果我點擊關閉按鈕,一切完美,但如果我關閉的InfoView那麼之前在另一個信息按鈕點擊我有衝突的約束並且該視圖不會按照要求對齊。我試圖去除先前的限制......但顯然我無法取得成功。

2)我試圖關閉InfoView的,即使我的InfoView的以外的任何地方點擊,而且這裏同樣的問題:衝突的約束和視圖不會用正確的按鈕

謝謝您的幫助對齊。

回答

-1

I通過添加數組來解決。

我初始化一個數組在開始的類(var約束= NSLayoutConstraint),然後我添加每次我約束到數組中。 每次我點擊一個按鈕,我檢查數組是否爲空。如果它不是我刪除約束。代碼如下:

if sender.tag == 1{ 
     if constraint.count > 0 { 
      NSLayoutConstraint.deactivate(constraint) 
      constraint.removeAll() 
     } 
     let alignYConstraint = NSLayoutConstraint(item: infoView, attribute: .centerY, relatedBy: .equal, toItem: infoButtons[0], attribute: .centerY, multiplier: 1.0, constant: 0) 
     NSLayoutConstraint.activate([alignYConstraint]) 
     constraint.append(alignYConstraint) 
     infoView.isHidden = false 
     infoView.textView.text = "Text goes here" 
     infoView.onClickCallback = { 
      self.infoView.isHidden = true 
      //self.infoView.removeFromSuperview() 
      NSLayoutConstraint.deactivate([alignYConstraint]) 
     } 
    }else if sender.tag == 2 { 
     if constraint.count > 0 { 
      NSLayoutConstraint.deactivate(constraint) 
      constraint.removeAll() 
     } 
............. 
相關問題