Benefit portál
Pouze tento týden sleva až 80 % na e-learning týkající se Swift
30 % bodů zdarma na online výuku díky naší Slevové akci!
Avatar
codlx
Člen
Avatar
codlx:15. septembra 14:17

Ahoj všem,
aplikace se spouští přes ViewController1, ze které se přesouvám přes segue do ViewController2. V ViewController2 volám pak self.dismiss(a­nimated: true, completion: nil) přes které se dostávám zpět na ViewController1. Má otázka zní, jak z ViewController2 zavolat tableView.relo­adData() v ViewController1??

Skúsil som: Na Googlu jsem našel, že někomu fungovalo vytvořit na ViewController1 funkci:

func reloaddata() {
self.tableView­.reloadData()
}

a v ViewController2 zavolat:

let fav:ViewContro­ller1!
fav.reloaddata()

což mi píše Constant 'fav' used before being initialized :(

Poraďte mi někdo prosím.

Chcem docieliť: Když se vrátí zpět z VC2 na VC1, tak potřebuji aktualizovat data ve VC1

 
Odpovedať
15. septembra 14:17
Avatar
CoffeeMAN
Člen
Avatar
CoffeeMAN:15. septembra 15:25

Ahoj, nemám to teď vyzkoušené, ale napadají mne 2 možnosti a to. 1) Použít ve VC1 "viewWillAppear", kde při každém obnovení dojde k zavolání metody reloadData() pro UITableView:

// MARK: viewWillAppear
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)
        self.tableView.reloadData()
    }
  1. Použití protokolu, kde VC2 zavolá metodu, která bude implementovaná VC1 (bude obsahovat logiku - přesněji reloadData()) a zavolá se těsně před dismiss, ale osobně se mi zdá elegantnější první možnost :-)
Hore Odpovedať
15. septembra 15:25
Není čas, ztrácet čas.
Avatar
Filip Němeček
Překladatel
Avatar
Filip Němeček:15. septembra 17:03

Radši bych zvolil viewDidAppear, protože viewWillAppear se volá hned, jakmile třeba začneš takové to gesto zpět ale pak si to rozmyslíš a table view se nelíbí, když má překreslovat layout, ale ještě není visible.

Pokud se na obrazovku vracíš i z jiných míst, tak bych po zavření ViewController2 poslal notifikaci přes NotificationCenter.default, kterou odešleš v completion toho dismiss a zachytíš ve VC1, kde na základě toho uděláš reload. Pro jistotu přes DispatchQueue.main.async.

 
Hore Odpovedať
15. septembra 17:03
Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!
Avatar
codlx
Člen
Avatar
Odpovedá na CoffeeMAN
codlx:15. septembra 17:12

Ahoj, tu první variantu jsem zkoušel a v tomto podání funkční není. Dle mého se viewWillAppear volá když použiješ příklad tlačítko back a ne když se přesuneš přes ten dismiss.

Přes to volání metodiky to myslíš přesněji jak?

 
Hore Odpovedať
15. septembra 17:12
Avatar
codlx
Člen
Avatar
codlx:15. septembra 17:15

Tak už jsem na to přišel. Musí se ve storyboardu změnit presentation na Full screen. Pak maká viewWillAppear

Díky za nakopnutí.
K.

 
Hore Odpovedať
15. septembra 17:15
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 5 správy z 5.