2015-03-03 52 views
11

我正忙於用帳戶頁面製作應用程序。我希望用戶可以通過該頁面登錄,並在成功完成後立即重新加載頁面以顯示其帳戶信息,而不是標準消息,指出他們必須登錄才能使用該頁面。重新加載/更新在Swift中查看

但是,當我從登錄狀態發回賬戶頁面時,視圖並沒有真正更新。因此,我想知道是否在某些按鈕被按下後無法重新加載視圖,這些按鈕可以再次檢查用戶是否登錄並進行相應處理。

回答

12

如果要觸發布點,或只是畫有setNeedsLayoutsetNeedsDisplay

有重新加載自定義數據(iOS上)


所以做了重載沒有內置的方法並在一個重新加載 - 呼籲setNeedsDisplay

import UIKit 

protocol MyViewDelegate { 
    func viewString() -> String; 
} 

class MyView : UIView { 
    var myViewDelegate : MyViewDelegate? 
    private var str : String? 

    func reloadData() { 
     if myViewDelegate != nil { 
      str = myViewDelegate!.viewString() 
     } 
     self.setNeedsDisplay() 
    } 

    override func drawRect(rect: CGRect) { 
     UIColor.whiteColor().setFill() 
     UIRectFill(self.bounds) 
     if str != nil { 
      let ns = str! as NSString 
      ns.drawInRect(self.bounds, withAttributes: [NSForegroundColorAttributeName: UIColor.blueColor(), NSFontAttributeName: UIFont.systemFontOfSize(10)]) 
     } 
    } 
} 


class ViewController: UIViewController, MyViewDelegate { 
    func viewString() -> String { 
     return "blabla" 
    } 

    var v : MyView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     v = MyView(frame: self.view.bounds) 
     self.view.addSubview(v) 

     v.myViewDelegate = self; 
    } 

    override func viewWillAppear(animated: Bool) { 
     v.reloadData() 
    } 
} 
+1

你認爲你能告訴我一個例子,因爲我不完全理解你的意思有什麼用。 – 2015-03-03 09:12:51

+0

我試圖提供一個小例子 – 2015-03-03 10:40:47

+0

謝謝,這個幫助很大,現在我得到了它的工作! – 2015-03-03 12:05:17

-1

斯威夫特已真正提高自己和對於很多人來說,如果他們不知道我們可以用一行簡單的代碼刷新整個視圖。

viewWillAppear(true)

+0

我還沒有能夠玩Swift一段時間了,但即使如此,我很確定這不會工作,除非你把所有的刷新邏輯放在viewWillAppear函數中,在這種情況下,你也可以做一個不同的功能並且調用那個。 – 2017-06-07 08:15:05