35286


`textFieldShouldReturn`を使って、`textfield`を新たに生成するコードを作りたいのですが、新しい`textfield`が画面(正確には、ポップアップ遷移先のビュー`AddTaskView`)に追加されません。どのようにすれば追加されるようになるでしょうか。  
今までの`textfield`を含む配列`AllTF`の要素の数をタイトルとするボタン（`addAllTask`）には、新しく生成した`textfield`の分が反映されているので、生成はされているはずなのですが、、、、  
なお、操作は全て、ポップアップで画面遷移した遷移先の`AddTaskViewController`で行われています。また、`TF1`や`addAllTask`、新しく追加したい`textfield`は全て`AddTaskView`上のものです。  
以下、コードを掲載します。  
回答して頂けたら幸いです。

[code]

    import UIKit
    
    class AddTaskViewController: UIViewController, UITextFieldDelegate{
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Do any additional setup after loading the view.
            TF1.delegate = self
            addAllTask.setTitle("タスクを１項目追加", for: .normal)
            AllTF.append(TF1)
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        @IBOutlet weak var AddTaskView: UIView!
    
        @IBOutlet weak var addAllTask: UIButton!
    
        @IBOutlet weak var TF1: UITextField!
    
        var AllTF: [UITextField] = []
    
    
        var nextTF: UITextField!
    
        func textFieldShouldReturn(_ textField: UITextField) -> Bool
        {
            let numberOfTF = AllTF.count
    
            textField.resignFirstResponder()
            createNewTF(parameter: numberOfTF)
            return true
        }
    
        func createNewTF(parameter: Int)
        {
            let width = Int(TF1.frame.width)
            let height = Int(TF1.frame.height)
            let X = Int(TF1.frame.origin.x)
            let Y = Int(TF1.frame.origin.y) + (height + 10) * parameter
    
            nextTF = UITextField(frame: CGRect(x: X, y: Y, width: width, height: height))
            self.AddTaskView.addSubview(nextTF)
            AllTF.append(nextTF)
            nextTF.delegate = self
    
            addAllTask.setTitle("タスクを\(AllTF.count)項目追加", for: .normal)
        }
    }
    
[/code]


CC BY-SA 3.0
2017-06-02T07:48:25.803
35218
2017-06-05T03:25:52.950
20671
question
swift xcode swift3 xcode8
returnキーで生成したはずのtextfieldが画面に追加されない


Text
Fieldは、新規に追加されているはずですね。コードから生成した`UITextField`のデフォルトが、枠なしのスタイルなので、追加されたように見えないだけではありませんか？

[code]

    // var nextTF: UITextField! // 削除
    
    func createNewTF(parameter: Int)
    {
        let width = Int(TF1.frame.width)
        let height = Int(TF1.frame.height)
        let X = Int(TF1.frame.origin.x)
        let Y = Int(TF1.frame.origin.y) + (height + 10) * parameter
    
        let nextTF = UITextField(frame: CGRect(x: X, y: Y, width: width, height: height)) // 変更
        nextTF.borderStyle = TF1.borderStyle // 追加
        self.AddTaskView.addSubview(nextTF)
        AllTF.append(nextTF)
        nextTF.delegate = self
    
        addAllTask.setTitle("タスクを\(AllTF.count)項目追加", for: .normal)
    }
    
[/code]

新規作成したText Fieldのスタイルを、`TF1`と同じに指定することで、追加が目で確認できるよう、1行追加してみました。

なお、本題と直接関係ありませんが、`nextTF`をプロパティとする意味がわからないので、上のサンプルコードでは、ローカルな変数に変更してあります。


CC BY-SA 3.0
2017-06-05T03:25:52.950
35286
2017-06-05T03:25:52.950
18540
35218
answer