2015-03-03 24 views
11

Jestem zajęty tworzeniem aplikacji ze stroną konta. Chcę, aby użytkownicy mogli logować się za pośrednictwem tej strony i jak tylko zrobią to z powodzeniem, aby strona przeładowała się, aby wyświetlać informacje o koncie, zamiast standardowego komunikatu informującego, że muszą się zalogować, aby skorzystać ze strony.Ponownie załaduj/zaktualizuj widok w Swift

Jednak gdy odeślę do strony konta z logowania, widok nie aktualizuje się. Dlatego zastanawiam się, czy nie mogę ponownie załadować widoku po naciśnięciu niektórych przycisków, które mogą ponownie sprawdzić, czy użytkownik jest zalogowany, czy nie, i odpowiednio się z nim skontaktować.

Odpowiedz

12

jeśli chcesz wywołać layouting lub po prostu rysunek jest setNeedsLayout i setNeedsDisplay

Nie ma wbudowanej metody, aby przeładować dane niestandardowe (na iOS)


tak zrobić reload i wewnątrz przeładowania - zadzwoń 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

Czy myślisz, że możesz mi pokazać przykład, bo nie całkiem rozumiem, co masz na myśli z tym. –

+0

Próbowałem podać mały przykład: –

+0

Dziękuję, to bardzo pomogło, a teraz działam! –

-1

Swift naprawdę się rozwinął i dla wielu osób, jeśli nie wiedzą, możemy odświeżyć cały widok za pomocą tylko jednej prostej linii kodu.

viewWillAppear(true)

+0

Od pewnego czasu nie jestem w stanie bawić się z Swift, ale nawet wtedy jestem pewien, że to nie zadziała, dopóki nie włożysz odświeżającej logiki do funkcji viewWillAppear, w takim przypadku możesz równie dobrze wykonać inną funkcję i ją wywołać. –

Powiązane problemy