Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

Child view'dan parent view'a veri göndermek?

0 oy
20 kez görüntülendi
20, Haziran, 20 ios development kategorisinde csayin tarafından soruldu

Merhabalar geliştirdiğim uygulamada; text field'a tıklandığında kullanıcı bir table view'a gidiyor ve bu viewda multiple selection yaparak bir array oluşturuluyor. Bu array'i user defaults'a kaydedip text filed'in bulunduğu ilk saydada textfield.text'e yazdırıyorum. Ancak table view'da seçim yapılıp ilk sayfaya dönüş yapıldığında haliyle textfiled.text boş geliyor ve sayfadan ayrılıp geri dönmek gerekiyor. Sorun bu adımda maalesef ben tableview'da seçim yapılıp "back" butonuna basıldığında textfiled'a yazdırılmasını istiyorum hatta viewWillDisapear'a;

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    if self.isMovingFromParent {
        let ep = EditProfileVC()
        ep.fillTextFields()
    }
}

böyle bir kod yazdım ancak; textfield'da "Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value" hatası alıyorum.

 func fillTextFields(){

       if let _selected:[String] = UserDefaults.standard.array(forKey: "selectedLang") as? [String]{
            let strLanguage = _selected.joined(separator: ", ")
            print(strLanguage)
            _txtLanguages.text = strLanguage // Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

        }
  }

Konu hakkında fikir verebilecek arkadaşlardan yorumlarını bekliyorum. Herkese iyi çalışmalar.

1 cevap

+1 oy
20, Haziran, 20 yasin tarafından cevaplandı
21, Haziran, 21 csayin tarafından seçilmiş
 
En İyi Cevap

Sanırım bu controller'lar arasındaki geçişleri NavigationController'la yapıyorsun.
Bu durumda seçimlerin yapıldığı controller'dan, text'field'in bulunduğu controllera dönerken, bu dönüş işlemini tetiklediğin aksiyonda mevcut navigationController'ın altındaki viewController'ları listeleyebilir ve textField'in bulunduğu ilk controller'ı bulabilirsin.
Daha sonrada bu controller altındaki textField'e erişir ve datanı set edersin.

kabaca şöyle bişeyler yapmalısın.

func turnBackAction() {
   if let currentNavigationController = self.navigationController {
      for controller in currentNavigationController.viewControllers {
         if controller.isKind(of: EditProfileVC.self) {
            if let editProfileVC = controller as? EditProfileVC {
               editProfileVC.fillTextFields()
            }
            break
         }
      }
      currentNavigationController.popViewController(animated: true)
   }
}
21, Haziran, 21 csayin tarafından yorumlandı

Teşekkür ederim Yasin hocam. Cevabınız işe yaradı. Sadece;

  currentNavigationController.popViewController(animated: true)

satırını kapattım. Aksi takdirde textField'ın bulunduğu viewdan bir önceki view'a yönlendirme yapıyor.

...