Q:

textFieldShouldReturnで生成したつもりのボタンが表示されない

簡単なTodoリストを作ろうとしています。現時点は、チェックボックスを作り終えた段階です。
evernoteのように、改行したら新しいチェックボックスが出現するようにしたのですが、苦戦しています。textFieldShouldReturnを使おうとしているのですが、ここで生成しているつもりのボタンが画面に表示されません。（resignFristResponder()の改行は反映されています。）どこが悪いのか、ご指摘頂けたら幸いです。
※以下では、子クラスとしてチェックボックスを生成する「CheckBox」というクラスを持っています。
import UIKit

class ViewController: UIViewController,UITextFieldDelegate {

    @IBAction func button(_ sender: CheckBox) {
    }
    @IBOutlet weak var WhatToDo: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        WhatToDo.delegate = self
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    func textFieldShouldReturn(_ WhatToDo: UITextField) -> Bool {
        let newBox : UIButton = CheckBox()
        newBox.layer.position = CGPoint(x: 100, y:100)
        newBox.backgroundColor = UIColor.red
        self.view.addSubview(newBox)
        WhatToDo.resignFirstResponder()
        return true
    }
}

class CheckBox: UIButton {
    let checkedImage = UIImage(named: "checked-box")
    let uncheckedImage = UIImage(named: "unchecked-box")

    var isChecked : Bool = false{
        didSet{
            if isChecked == true{
                self.setImage(checkedImage, for:.normal)
            }else{
                self.setImage(uncheckedImage, for:.normal)
            }
        }
    }

    override func awakeFromNib() {
        self.addTarget(self, action: #selector(self.buttondClicked(_:)), for: UIControlEvents.touchUpInside)
    self.isChecked = false
    }

    func buttondClicked(_ sender:UIButton){
        if(sender == self){
            if isChecked == true{
                isChecked = false
            }else{
                isChecked = true
            }
        }
    }

A:

根本的には、 CheckBoxの実装がinit()でインスタンス化できるように作られていない というのが原因ですね。awakeFromNib()というのはNibファイル(xibかstoryboard)からインスタンス化した時にしか呼ばれないので、init()でインスタンス化した場合には、正しく初期化されません。
例えば、CheckBoxクラスに次のようなコードを書き加えてみてください。
init() {
    let frm = CGRect(origin: CGPoint.zero, size: checkedImage.size)
    super.init(frame: frm)
    awakeFromNib()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

上記の修正だけでもチェックボックスが表示されるようになるはずですが、コメントに書いたようにlayer.positionで位置合わせをするのは標準的とは言えないので、addSubviewする部分は例えば次のように書き換えるべきでしょう。
    let newBox : UIButton = CheckBox()
    newBox.frame = CGRect(origin: CGPoint(x: 100, y:100), size: newBox.frame.size) //<- 表示位置は`frame`で指定する
    newBox.backgroundColor = UIColor.red
    self.view.addSubview(newBox)

上記に非掲載の部分でコードの読みにくい部分を書き換えながら試したので、若干修正が必要かもしれません。何かお気付きの点があればコメント等でお知らせください。
コメントで指摘していただきましたが、上記のコードは、プロパティの宣言を
let checkedImage = UIImage(named: "checked-box")!
let uncheckedImage = UIImage(named: "unchecked-box")!

のように修正したのを前提で書いてありましたが、その点を記載し忘れていました。ご指摘ありがとうございます。(UIImage.init(named:)がnilを返すのは、アプリの構成ミスで"checked-box"とかで指定された画像リソースが存在しない場合だけなので、意図的にさっさと強制アンラップの!を使用しています。)

