2017-11-09 6 views
0

私はラベルを含むビューを持っており、ラベルの値を変更するボタンがあります。ボタンで値を1つずつ変更する代わりに、ビュー全体をリロードしてラベルを更新するにはどうすればよいですか。Swiftでデータを変更した後でビューを再読み込みする方法

@IBOutlet weak var one: UILabel! 
    @IBOutlet weak var two: UILabel! 
    @IBOutlet weak var three: UILabel! 
.... 
    @IBOutlet weak var updateLabels: UIButton!{ 
     //doing something to change the value of the labels 
     //then wanna reload the whole view 
     viewDidLoad() 
    } 

私はviewDidLoad()メソッドを呼び出していましたが、機能しませんでした。

答えて

1

自分でviewDidLoadに電話をかけてはいけません。これは、OSが呼び出すフレームワーク機能で、ビューを設定する準備が整ったことを示します。

あなたは

func updateLabels() { 
     one.text = "one" 
     two.text = "two" 
     three.text = "three" 
} 

あなたの機能を分離し、お好きな時に、今あなたがupdateLabels関数を呼び出すことができれば、より良い役立つであろう。

0

すべてのラベルをメソッドに配置しない理由は何ですか?これまでにリロードする必要が生じたときに起動します。

override func viewDidLoad() { 
    super.viewDidLoad() 

    updateLabels() 

} 

func updateLabels() { 
    one.text = "one" 
    two.text = "two" 
    three.text = "three" 
} 


@IBAction func updateLabels(_ sender: Any) { 
     updateLabels() 
} 
+0

@ShauketSheikh悪いアプローチはどういう意味ですか?あなたが初期データを持っているときに、それらをviewDidLoadメソッドで更新し、新しい更新された値があるときは、それらを更新するために同じメソッドを任意のアクションメソッドで起動します。 –

-1

ラベルを更新する方法が正しくありません。次のように何をする必要がある:あなたがそれらをInterface Builderでリンクされている保証しなかったよう

はあなたのラベルを宣言します。

/// Set The Text Labels Text 
@IBAction func updateLabelText(){ 

    //Set Label Text 
    one.text = "one" 
    two.text = "two" 
    three.text = "three" 
} 

//Declare The Labels 
@IBOutlet var one: UILabel! 
@IBOutlet var two: UILabel! 
@IBOutlet var three: UILabel! 

を次にUIButtonによってトリガーされるIBAction関数を作成します

もちろんこれをInterface BuilderのUIButtonインスタンスにリンクすることを忘れないでください。

これが役に立ちます。

+1

ユーザはUIButtonからこの変更をトリガしようとしていたと言いました。したがって、IBActionはこれを処理する良い方法です(ただし唯一の方法ではありません)。 –

関連する問題