UIImagePickerController увольнять неправильно

В UITabbarController есть 5 элементов: VC0, VC1, VC3 (выбрано по умолчанию), VC4, VC5.

UITabbarController > NavigationController > VC1 > VC1-A

UIImagePickerController представлен в VC1-A:

let imagePickerController = UIImagePickerController()
imagePickerController.sourceType = .photoLibrary
imagePickerController.delegate = self
imagePickerController.allowsEditing = false
self.present(imagePickerController, animated: false)

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    let info = convertFromUIImagePickerControllerInfoKeyDictionary(info)

    if let image = info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey.originalImage)] as? UIImage{
       topImage.image = image
    }

    picker.dismiss(animated: true, completion: nil)

}

Когда изображение выбрано, а средство выбора закрыто, представление перейдет к выбранному по умолчанию элементу VC3, но не к VC1-A.

Я нашел это в недавнем тесте в приложении, но я помню, что раньше он работал правильно. Теперь я не могу вспомнить, что я сделал, что может сделать это неправильным, обновление Xcode, обновление версии Swift? Я знаю, что не делаю никаких изменений в этой части.

Следующие попытки также не работают:

self.navigationController?.present(imagePickerController, animated: false)
self.navigationController?.dismiss(animated: true, completion: nil)
self.navigationController?.popViewController(animated: true)
picker.popViewController(animated: true)

К настоящему времени я заставляю это работать так:

picker.dismiss(animated: true, completion: {
        self.tabBarController?.selectedIndex = 1
    })

Но не стоит решать проблему, надеюсь, кто-то может дать правильное решение. Спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
229
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны получить tabBarController навигационного контроллера VC1-A и изменить выбранный индекс

picker.dismiss(animated: true) {//dismiss image picker
    if let navigationController = self.navigationController {
        navigationController.popToRootViewController(animated: true)//go to VC1
        navigationController.tabBarController?.selectedIndex = 2//go to VC3
    }
}

Я думал, что я как-то написал несколько плохих кодов, чтобы он не работал, нет возможности просто использовать dismiss? Помню раньше работало :-(

jdleung 21.05.2019 10:42

@jdleung попробуй self.navigationController?.tabBarController?.selectedIndex = 2

RajeshKumar R 21.05.2019 10:43

@jdleung Вы пробовали это?

RajeshKumar R 21.05.2019 10:51

На данный момент это работает: если позволить tbc = self.tabBarController{ tbc.selectedIndex = 1 }, экран теперь остается на VC3 примерно на 0,3 секунды, прежде чем перейти к VC1-A. Я ищу самый простой способ, а также хочу узнать, почему `picker.dismiss(animated: true') работало раньше?

jdleung 21.05.2019 10:53

@jdleung просто попробуй picker.dismiss(animated: true) { self.navigationController.tabBarController?.selectedIndex = 2 }

RajeshKumar R 21.05.2019 10:55

Это работает, но экран остается на VC3 некоторое время (хотя и мимолетный проблеск), прежде чем вернуться к VC1-A, есть ли какой-либо другой прямой способ просто закрыть? Я сделал неправильную презентацию? Я попытался установить переход как show detail, он хорошо отклоняется, но не унаследовал панель навигации topViewController.

jdleung 21.05.2019 11:14

Другие вопросы по теме