September discount week
Tento týden až 80% sleva na e-learning týkající se jazyka C
50 % bodů zdarma na online výuku díky naší Slevové akci!
Avatar
codlx
Člen
Avatar
codlx:15. září 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??

Zkusil jsem: 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.

Chci docílit: Když se vrátí zpět z VC2 na VC1, tak potřebuji aktualizovat data ve VC1

 
Odpovědět
15. září 14:17
Avatar
CoffeeMAN
Člen
Avatar
CoffeeMAN:15. září 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 :-)
Nahoru Odpovědět
15. září 15:25
Není čas, ztrácet čas.
Avatar
Filip Němeček
Překladatel
Avatar
Filip Němeček:15. září 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.

 
Nahoru Odpovědět
15. září 17:03
Avatar
codlx
Člen
Avatar
Odpovídá na CoffeeMAN
codlx:15. září 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?

 
Nahoru Odpovědět
15. září 17:12
Avatar
codlx
Člen
Avatar
codlx:15. září 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.

 
Nahoru Odpovědět
15. září 17:15
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.