2016-07-14 12 views
0

私はそれを実行するときにmyActionという関数を持っています。
myAction関数でtextFiledを最初に更新するにはどうすればよいですか?これを行うためのSwiftの関数でUIを最初に更新するには

func doAction() { 

    // do this action will take a lot of time 
} 

@IBAction func myAction(sender: AnyObject) { 

    // update textField first 
    self.textFild?.stringValue = "start do action!" 

    doAction() 

    // update textField when doAction finished 
    self.textFild?.stringValue = "finished action!" 
} 
+0

DoAction()before complete //テキストフィールドの更新が完了しましたか? –

+0

私はtextField UI fistを更新し、 "doAction"関数を実行して、最終的にtextField UIを更新する必要があります。 – CocoaUser

答えて

0

より良いあなたのdoAction()に完了ハンドラを使用しているし、それが完了すると、その後、あなたは"finished action"にごtextFieldを更新することができます。

class someClass: ... { 

override func viewDidLoad(){ 
super.viewDidLoad() 
self.textField?.text = "start do action" 
//your code 
} 

func doAction(completion: (finished: Bool) ->()){ 

//your code 
completion(finished: true) 

} 

@IBAction func myAction(sender: AnyObject) { 

doAction{success in 

if success{ 
dispatch_async(dispatch_get_main_queue(), { 
self.textField?.text = "finished action!"  //Update on main thread 
}) 
} 
else{ 
//do something else 
} 

} 
} 

これは動作するはずです:ビューはそうのように、読み込みが完了してテキストフィールドには、すぐ"start do action!"を読み取るようviewDidLoad()に自分自身を"start do action!"を設定します。試してみてください:)

+0

Dershowitz123ありがとうございますが、NSViewControllerの内部にはありません – CocoaUser

関連する問題