Я работаю над приложением, которое отображает расширение сегодня с некоторой информацией.Когда я нажимаю на расширение сегодня, оно открывает приложение и переходит к подпредставлению из корня для отображения информации.Обычно пользователь затем щелкает стрелку назад, чтобы вернуться к основному виду, но нет никакого способа узнать, действительно ли это сделано.Пользователь может вернуться к расширению сегодня и снова нажать.Когда это сделано, подпредставление снова открывается с новой информацией.Если это делается несколько раз, я получаю несколько экземпляров подпредставления, и мне приходится нажимать кнопку «Назад» на каждом из них, чтобы вернуться к основному виду.
Мой вопрос:Можно ли проверить, если подпредставление уже видно?Я хотел бы иметь возможность просто отправить ему обновленную информацию, вместо того, чтобы отображать совершенно новое представление.
В настоящее время я занимаюсь этим, сохраняя экземпляр UIViewController
в верхней части моегокорень.Если это не ноль, то я просто передаю ему информацию и перерисовываю.Если это ноль, то я звоню performSegue
и создаю новый.
Я просто думаю, что должен быть лучший способ справиться с этим.
Редактировать: Спасибо комментатору ниже, Я придумал этот код, который, кажется, делает то, что мне нужно.
if let quoteView = self.navigationController?.topViewController as? ShowQuoteVC {
quoteView.updateQuoteInformation(usingQuote: QuoteService.instance.getQuote(byQuoteNumber: quote))
}
else {
performSegue(withIdentifier: "showQuote", sender: quote)
}
Это отличается от предложенного поста, где ответ:
if (self.navigationController.topViewController == self) {
//the view is currently displayed
}
В данном случае этоне работает, потому что когда я захожу в приложение из расширения Today, оно переходит к контроллеру корневого представленияМне нужно было проверить, отображается ли подпредставление, и self.navigationController.topViewcontroller == self никогда не будет работать, потому что я не проверяю, является ли контроллер вида сверху корневым контроллером вида.Предложения в этом посте больше подходят для того, что я пытаюсь выполнить.