IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
codlx
Člen
Avatar
codlx:15.9.2020 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.9.2020 14:17
Avatar
CoffeeMAN
Člen
Avatar
CoffeeMAN:15.9.2020 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.9.2020 15:25
Není čas, ztrácet čas.
Avatar
Filip Němeček
Tvůrce
Avatar
Filip Němeček:15.9.2020 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.9.2020 17:03
Avatar
codlx
Člen
Avatar
Odpovedá na CoffeeMAN
codlx:15.9.2020 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.9.2020 17:12
Avatar
codlx
Člen
Avatar
codlx:15.9.2020 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.9.2020 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.

Zatiaľ nikto nevložil komentár - buď prvý!