2016-11-23 51 views
1

我试图做所有事情都没有故事板,但添加我的标签时仍然没有零,但我不明白为什么。我确信它的死亡简单,即时通讯是盲目的,但我只是不能看到它后很多谷歌搜索。Stackview标签没有以编程方式添加

视图控制器:

class SquaresViewController: UIViewController { 

     let stackView = OAStackView() 
     let titleView = TitleView(frame: CGRect.zero) 

     @IBOutlet var squaresCollectionView: UICollectionView! 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      stackView.axis = .vertical 
      stackView.translatesAutoresizingMaskIntoConstraints = false 

      stackView.addArrangedSubview(titleView) 
      titleView.snp.makeConstraints { make in 
       make.height.equalTo(50) 
       make.top.equalTo(view.snp.top) 
       make.left.equalTo(view.snp.left) 
       make.right.equalTo(view.snp.right) 
      } 

     } 
    } 

titleview的:

import UIKit 

    class TitleView: UIView { 

     @IBOutlet weak var titleText: UILabel! 

     override init(frame: CGRect) { 
      super.init(frame: frame) 
      self.translatesAutoresizingMaskIntoConstraints = false 
      createView() 
     } 

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

     func createView() { 
      titleText = UILabel(frame: CGRect.zero) 
      titleText.translatesAutoresizingMaskIntoConstraints = false 

      titleText.text = "Tappy tap tap a square!" 
      titleText.textAlignment = .center 
      titleText.numberOfLines = 0 

      self.addSubview(titleText) 

      titleText.snp.makeConstraints { make in 
       make.edges.equalTo(self.snp.edges) 
      } 


     } 
    } 

在构建失败的:

titleText.translatesAutoresizingMaskIntoConstraints = false 

有:

fatal error: unexpectedly found nil while unwrapping an Optional value 

任何帮助将是伟大的,即时通讯确定其简单,但我不能再看到了。谢谢

回答

1

首先,我不明白为什么你为titleText创建IBOutlet如果你不想使用故事板。如果你不想用故事板,改变实施:

var titleText : UILabel! 

其次,应用程序崩溃,因为你要求它在还未被添加到层次结构中的视图执行操作。为了便于阅读,我已经注释了除了那些重要的行外的所有行。请看下图:

func createView() { 
    //titleText = UILabel(frame: CGRect.zero) 
    titleText.translatesAutoresizingMaskIntoConstraints = false // <-- You are trying to perform an operation on titleText here 

    //titleText.text = "Tappy tap tap a square!" 
    //titleText.textAlignment = .center 
    //titleText.numberOfLines = 0 

    self.addSubview(titleText) // <-- but you are adding it to the view hierarchy here 

    //titleText.snp.makeConstraints { make in 
     //make.edges.equalTo(self.snp.edges) 
    //} 
} 

titleText已被添加到视图层次,你可以调用它translatesAutoresizingMaskIntoConstraints之前,像这样:

self.view.addSubview(titleText) 
titleText.translatesAutoresizingMaskIntoConstraints = false // <-- Here we are waiting until the view has been added to the hierarchy to perform operations on it 

所以尝试改变实现看起来像这样:

import UIKit 

class TitleView: UIView { 

    var titleText: UILabel! 

    override init(frame: CGRect) { 
     // leave as is, removed for space 
    } 

    required init?(coder aDecoder: NSCoder) { 
     // leave as is, removed for space 
    } 

    func createView() { 
     titleText = UILabel(frame: CGRect.zero) 
     titleText.text = "Tappy tap tap a square!" 
     titleText.textAlignment = .center 
     titleText.numberOfLines = 0 

     self.addSubview(titleText) 
     titleText.translatesAutoresizingMaskIntoConstraints = false 

     titleText.snp.makeConstraints { make in 
      make.edges.equalTo(self.snp.edges) 
     } 
    } 
} 
+0

非常感谢。我尝试重新排序,但iboutlet是主要问题。 – Wazza

+0

没问题! @WayneRumble – Wes