Вы должны использовать модель делегата, чтобы сообщить первому VC, что язык изменился.
Вот пример.Сначала определите интерфейс делегата, например:
protocol LanguageSelectionDelegate
{
fun languageSelector(didSetFromLanguage: Int)
fun languageSelector(didSetToLanguage: Int)
}
Вы можете либо определить один метод, который передает оба (когда нажата кнопка OK на втором VC), либо использовать два метода, как здесь, которые вызываются, как толькопользователь щелкает опцию (которую вы используете, может зависеть от того, есть ли опция «Отмена», которая закрывает второй VC без применения изменений).
Приведите ваш первый VC в соответствие с этим протоколом и добавьте реализацию.В этой реализации вам может понадобиться только перезагрузить данные табличного представления - без кода, который я не знаю.Например (показывает только изменение языка «из», но «на» почти идентично):
class FirstVC: UITableViewController, LanguageSelectionDelegate
{
private var fromLanguageId = UserDefaults.standard.integer(forKey: "fromLanguage")
fun languageSelector(didSetFromLanguage languageId: Int)
{
UserDefaults.standard.set(languageId, forKey: "fromLanguage")
fromLanguageId = languageId
tableView.reloadData()
}
}
Это предполагает, что ваша реализация cellForRowAt
заполнит ячейку в соответствии с languageId.Вам необходимо сохранить ссылку на делегат во втором VC, например:
public val delegate: LanguageSelectionDelegate!
и убедиться, что вы инициализируете ее в своей первой функции prepareFor (segue) VC, например:
let vc2 = segue.destination as! SecondVC
vc2.delegate = self
Ваш didSelectRowAt
для второго виртуального канала станет:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
tableView.deselectRow(at: indexPath, animated: true)
if language_segment.selectedSegmentIndex == 0
{ //from
selectedFromLanguage = filteredLanguages[indexPath.row]
delegate.languageSelector(didSetFromLanguage: selectedFromLanguage.id)
}
else
{ //to
selectedToLanguage = filteredLanguages[indexPath.row]
delegate.languageSelector(didSetToLanguage: selectedToLanguage.id)
}
}
Нет необходимости вызывать reloadData()
из этой функции.И обратите внимание, что вам действительно нужно иметь дело только с уникальным идентификатором для языка (я предположил здесь int), а не сохранять все детали об этом.