returnで生成されたはずのチェックボックスが作動しない。
最初の行にUITextFieldとチェックボックスを表示して、UITextFieldでreturnキーを押した時に、次の行に新しいUITextFieldとチェックボックスが表示されるようなプログラムを作りたいのですが、UITextFieldはいまくいったもののチェックボックスが作動しません。どうすれば作動するのでしょうか。
以下、親クラス、子クラスの順番となっています。
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var firstBox: UIButton!
var newBox: UIButton!
@IBOutlet weak var firstTextField: UITextField!
var counter = 0
var newTextField: UITextField!
var currentTextField: UITextField!
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
textField.resignFirstResponder()
counter += 1
createNewTextFieldAndBox(parameter: counter)
return true
}
func createNewTextFieldAndBox(parameter: Int)
{
//information of the textfields
let tWidth = Int(firstTextField.frame.width) //250
let tHeight = Int(firstTextField.frame.height) //30
let XofTextField = Int(firstTextField.frame.origin.x)
let YofTextField = (Int(firstTextField.frame.origin.y) + 16)*parameter + 20
//information of the boxes
let bWidth = Int(firstBox.frame.width)
let bHeight = Int(firstBox.frame.height)
let XofBox = Int(firstBox.frame.origin.x)
let YofBox = (Int(firstBox.frame.origin.y) + 16)*parameter + 20
//create new TF
newTextField = UITextField(frame: CGRect(x: XofTextField, y: YofTextField, width: tWidth, height: tHeight))
self.view.addSubview(newTextField)
currentTextField = newTextField
currentTextField.delegate = self
//create new Box
newBox = UIButton(frame: CGRect(x: XofBox, y: YofBox, width: bWidth, height: bHeight))
newBox.setImage(#imageLiteral(resourceName: "uncheckedBox"), for: .normal)
self.view.addSubview(newBox)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
firstTextField.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
以下、子クラスです。
import UIKit
class CheckBox: UIButton {
var isChecked:Bool = false
{
didSet
{
if isChecked == true
{
self.setImage(#imageLiteral(resourceName: "checkedBox"), for: .normal)
}
else
{
self.setImage(#imageLiteral(resourceName: "uncheckedBox"), 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
}
}
}
}
一部インデントがおかしくなっているところがあるかもしれませんがご容赦ください。また、子クラスのawakeFromNib以下やその周辺のコードはネットから引っ張ってきたものをほぼコピペしただけのものなので、あまりコードの意味がわかっていない状況です。ここのあたりのコードも新しいチェックボックスが作動しないことと関係あるのでしょうか。