2014-06-27 64 views
1

我在設計自定義視圖時遇到了麻煩。 它基本上是一個顯示12個標籤的表格,其中左上標籤和左下標籤必須是其他視圖的寬度* 5。我已經添加的意見和調整佈局子視圖的框架,但標籤未出現在視圖中(已經在Xcode佈局子視圖無法正常工作

override func layoutSubviews() { 
    super.layoutSubviews() 

    let width = self.frame.size.width 
    let height = self.frame.size.height 

    let normalWidth = width/10 
    let normalHeight = height/2 


    var currentOrigin = CGPoint(x: 0, y: 0) 

    let nameSize = CGSize(width: normalWidth * 5 - 3, height: normalHeight) 

    labels[0][0].frame = CGRect(origin: currentOrigin, size: nameSize) 

    currentOrigin.x += normalWidth 

    for j in labels[0]{ 
     j.frame = CGRect(origin: currentOrigin, size: CGSize(width: normalWidth - 3, height: normalHeight)) 
     currentOrigin.x += normalWidth 
    } 

    currentOrigin.y = normalHeight 
    currentOrigin.x = 0 
    labels[1][0].frame = CGRect(origin: currentOrigin, size: nameSize) 

    for j in labels[1]{ 
     j.frame = CGRect(origin: currentOrigin, size: CGSize(width: normalWidth - 3, height: normalHeight)) 
     currentOrigin.x += normalWidth 
    } 
} 

的新觀點調試檢查,這是即時通訊使用的構造。根據調試器的意見是在上海華,但它們是不可見

init(frame: CGRect) { 
    labels = Array(count:2, repeatedValue:Array(count:6, repeatedValue: UILabel())) 
    super.init(frame: frame) 

    for i in 0..labels.count{ 
     for j in 0..labels[i].count{ 
      labels[i][j] = UILabel() 
      labels[i][j].font = currentFont 
      labels[i][j].adjustsFontSizeToFitWidth = true 
      labels[i][j].textAlignment = NSTextAlignment.Center 
      labels[i][j].text = "HOLA MUNDO" 
      addSubview(labels[i][j]) 
     } 
    } 

    for i in 0..labels.count{ 
     if let k = delegate?{ 
      labels[i][0].text = k.name(i+1) 
     } 
    } 


    for i in 0..labels.count{ 
     for j in 1..labels[i].count{ 
      labels[i][j].text = "0" 
     } 
    } 
} 

回答

2

如果有人在這裏有一些類似的麻煩是,我終於找到

labels = Array(count:2, repeatedValue:Array(count:6, repeatedValue: UILabel())) 
解決方案10

該行生成2個UILabel數組,但數組的所有項都指向UILabel的同一個實例。也:

labels[0] === labels[1] //They will point to the same instance 

對方誤以爲是在

for i in 0..labels.count{ 
    if let k = delegate?{ 
     labels[i][0].text = k.name(i+1) 
    } 
} 

迭代正確的做法是從1迭代到labels.count作爲第一個標籤都必須有不同的大小。

正確的形式來實例化數組如下:

for i in 0..2{ 
     labels.append([UILabel]()) 
     for j in 0..6{ 
      labels[i].append(UILabel()) 
      labels[i][j].font = currentFont 
      labels[i][j].adjustsFontSizeToFitWidth = true 
      labels[i][j].textAlignment = NSTextAlignment.Center 
      labels[i][j].text = "HOLA MUNDO" 
       addSubview(labels[i][j]) 

     } 

希望它可以幫助你避免這種錯誤。這真的很難找到。