0

UIAlertController を使用して textField を表示し、電話番号を入力しています。[OK] をクリックしたときに、テキスト フィールドのテキスト コンテンツを変数に格納して、操作を実行できるようにしたいと考えています。コードは次のとおりです。

@IBAction func popup(sender : AnyObject) {
    var popupText: String = ""
    func config(textField: UITextField!)->Void{
        popupText = textField.text
    }

    var alc: UIAlertController = UIAlertController(title: "Phone", message: "Please enter phone #: ", preferredStyle: UIAlertControllerStyle.Alert)
    alc.addTextFieldWithConfigurationHandler(config)
    alc.addAction(UIAlertAction(title: "Submit", style: UIAlertActionStyle.Default, handler:{ UIAlertAction in
            print(popupText)
            self.performSegueWithIdentifier("popupSegue", sender: alc)


        }))
    alc.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))
    self.presentViewController(alc, animated: true, completion: nil)
}

popupText にアクセスしてその内容を印刷しようとすると、コンソールに何も表示されないため、空のように見えます。この textField のコンテンツにアクセスする方法、またはその識別子を取得する方法はありますか? (UIAlertController では "alc.textField.text を試せないようです) "config" での処理方法が間違っていると思いますが、このコントローラーのテキスト フィールドにアクセスする方法がまだわかりません。感謝します!

4

1 に答える 1

0

あなたがこれについて行っている方法にはいくつかの問題があります。

テキストフィールドの設定

    var popupText: String = ""
    func config(textField: UITextField!)->Void{
        popupText = textField.text
    }
    ...
    alc.addTextFieldWithConfigurationHandler(config)

config渡しているハンドラーはaddTextFieldWithConfigurationHandler、新しいテキスト フィールドを構成するためのものですが、その値にアクセスしようとしているようです。テキスト フィールドは新しいので空になりますが、これはあまり役に立たないと思います。テキスト フィールドの一部の属性を変更する必要がある場合は、これが正しい場所です。それ以外の場合は、 に渡しnilますaddTextField...

    func config(textField: UITextField!)->Void{
        textField.textColor = UIColor.redColor()
    }

テキスト フィールドの値へのアクセス

    alc.addAction(UIAlertAction(title: "Submit", style: UIAlertActionStyle.Default, handler:{ UIAlertAction in
        print(popupText)
        self.performSegueWithIdentifier("popupSegue", sender: alc)
    }))

ここで 2 つの問題popupTextがあります。これは単に空の文字列変数であり、テキスト フィールド、アラート アクション、またはアラート コントローラーのいずれにもリンクされていません。を使用して見つけることができるテキスト フィールド自体にアクセスする必要がありますalc.textFields[0]。次に、テキスト フィールドの値を に保存しようとしているように見えますが、popupTextこれはこのメソッドのローカル変数であり、実際には他の場所からアクセスすることはできません。何をしたいかにもよりますが、クラスのインスタンス プロパティに電話番号を格納することをお勧めします。いずれにせよ、次のようなものが必要です。

    alc.addAction(UIAlertAction(title: "Submit", style: UIAlertActionStyle.Default, handler:{ UIAlertAction in
        println(alc.textFields[0].text)
        self.performSegueWithIdentifier("popupSegue", sender: alc)
    }))
于 2014-06-27T19:18:41.260 に答える