web-dev-qa-db-ja.com

Swift UILabelのテキストの変更

私はAppleのSwiftを学ぼうとしています。私は最近GUIアプリを構築しようとしましたが、質問があります:

アプリのGUI要素と対話するにはどうすればよいですか?たとえば、インターフェイスビルダーを使用してUILabelを作成し、コントロールクリックしてViewControllerに接続して、@ IBOUTLETを取得しました。さて、View ControllerでこのUILabelのテキストを編集するにはどうすればよいですか?別の言い方をすれば、ストーリーボード上の何かのテキストをプログラムで制御するためにどのコードを使用できますか?オンラインで見つけたすべてのメソッドは、ストーリーボードで生成されたボタンではなく、コードで生成されたボタンでのみ動作するようです。

私は次のようなコードを見てきました

self.simpleLabel.text = "message"

これが正しい場合、問題のラベルにリンクするにはどうすればよいですか?つまり、このコードをIBOutletに接続するように適応させるには(どうすればいいのか)

23
rocket101

コントロールをIBOutletクラスのUIViewControllerと正常にリンクした場合、プロパティがそれに追加され、単にsimpleLabelを任意の名前に置き換えますIBOutlet接続は次のようになります。

class MyViewController: UIViewController {
    @IBOutlet weak var myLabel: UILabel!
    func someFunction() {
        self.myLabel.text = "text" 
    }
}
28
Alex Zielenski

作成したコンセントは、あなたが名前を付けたものでなければなりません。コンセントはView Controllerに属します。 self.simpleLabelは、 'my' simpleLabel 'という名前のプロパティの値を取得することを意味します。

アウトレットごとに名前が異なるため、ここでself.simpleLabelを使用しても、アウトレットの名前が「simpleLabel」になるまで機能しません。 「simpleLabel」を、作成時にアウトレットに付けた名前に置き換えてみてください。

正しい方法は次のとおりです。

self.yourLabelName.text = "message"
23
duci9y

IBOutletにこのようなものがある場合:

@IBOutlet var someLabel: UILabel!

次に、例のようにtextプロパティを設定できます。

someLabel.text = "Whatever text"

これで問題が発生している場合は、適切な場所にテキストプロパティを割り当てていない可能性があります。呼び出されない関数内にある場合、その行は実行されず、textプロパティは変更されません。 viewDidLoad関数をオーバーライドして、次のように行を追加します。

override func viewDidLoad() {
    super.viewDidLoad()
    someLabel.text = "Whatever text"
}

次に、ビューが読み込まれるとすぐに、textプロパティを設定します。コード行が実行中かどうかわからない場合は、いつでもそこにブレークポイントを置くか、出力を追加できます。何かのようなもの

println("Checkpoint")

不明なコードブロック内では、いつ、いつ実行されるかを確認できます。

お役に立てれば。

4
Matt

メインスレッドにないUIコンポーネントを変更しようとする場合があります。その場合は、次のようにします。

DispatchQueue.main.async {
        someLabel.text = "Whatever text"
}
4
itamarb