Один и тот же контроллер загружается дважды, прежде чем перейти (программно) ко второму VC в Swift?

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

У меня есть собственное расширение UIViewController с двумя функциями, которые программно представляют и закрывают VC (см. Ниже).

extension UIViewController {

    //present VC fromRight
    func presentDetail(_ viewControllerToPresent: UIViewController){
        //constant to hold animation
        let transition = CATransition()

        transition.duration =  0.3 //seconds
        transition.type = kCATransitionPush
        transition.subtype = kCATransitionFromRight
        self.view.window?.layer.add(transition, forKey: kCATransition)

        present(viewControllerToPresent, animated: false, completion: nil)

    }//end func

    //dismiss VC fromLeft
    func dismissDetail(){
        //constant to hold animation
        let transition = CATransition()

        transition.duration =  0.3 //seconds
        transition.type = kCATransitionPush
        transition.subtype = kCATransitionFromLeft
        self.view.window?.layer.add(transition, forKey: kCATransition)

        dismiss(animated: false, completion: nil)
    }//end func
}

У меня есть VenueListVC (первичный VC) с UITableView, моя функция didSelectRowAt ниже, которая представляет (с использованием настраиваемого расширения выше) VenueDetailsVC (вторичный VC).

Моя проблема заключается в том, что при выборе ячейки первичный VC (VenueListVC) загружается дважды, прежде чем модально представить вторичный VC (VenueDetailsVC). Других переходов между этими двумя венчурными капиталистами у меня нет.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    guard let venueDetailsVC = storyboard?.instantiateViewController(withIdentifier: "VenueDetailsVC") as? VenueDetailsVC else { return }  //create an instance of VenueDetailsVC

    presentDetail(venueDetailsVC)//present Group Feed VC using custom extension
}

Это происходит потому, что вы добавили «kCATransitionPush». поэтому он показывает переход по нажатию, а затем представляет представление.

Khushbu 01.05.2018 13:20

спасибо @Khushbu, но я пробовал все другие типы переходов, кроме "kCATransitionPush", и они не работают. В настоящее время я получаю такое поведение, что первичный VC скользит вправо дважды, прежде чем внезапно появляется вторичный VC.

Roggie 01.05.2018 13:33

Я думаю, что просмотр не загружается дважды. Добавьте точки останова в метод "cellForRowAt" в табличном представлении и проверьте его.

Khushbu 01.05.2018 14:32

Извините, что вы имеете в виду, добавляя точки останова?

Roggie 01.05.2018 14:35

Я имею в виду, что ваше представление не загружается дважды. Вы можете проверить это путем отладки. Итак, добавьте для этого точки останова.

Khushbu 01.05.2018 14:38

Вы имеете в виду «cellForRowAt» или «didSelectRowAt»? Что конкретно я ищу?

Roggie 01.05.2018 14:50

@RIG - вы сказали «У меня нет других переходов между этими двумя венчурными капиталистами» ... когда вы говорите «никакой другой», означает ли это, что у вас определен А Segue?

DonMag 01.05.2018 15:23

Как вы оцениваете это - «первичный VC (VenueListVC) загружается дважды, прежде чем модально представить вторичный VC»?

Ankit Jayaswal 01.05.2018 18:34

@DonMag Я имею в виду, что в моей раскадровке не установлены переходы. Я перехожу (переход) с помощью presentDtail () и dismiss () в моем расширении ViewCrontroller.

Roggie 02.05.2018 00:22

@AnkitJayaswal, когда я нажимаю на ячейку в своем основном контроллере, тот же самый основной контроллер скользит вправо, пока внезапно не появится дополнительный контроллер. Похоже, что основной контроллер снова загружается, когда я нажимаю на ячейку.

Roggie 02.05.2018 00:26

@RIG - похоже, что-то еще происходит в коде, который вы не показали. Быстрый тест, без проблем: github.com/DonMag/CustomPresent

DonMag 02.05.2018 14:27

@DonMag, спасибо за тест, я посмотрел, и да, у меня аналогичная настройка, поэтому очень странно, что мой код ведет себя немного иначе. Похоже, что представленный вторичный VC по какой-то причине очень медленно попадает в поле зрения.

Roggie 02.05.2018 14:50

@DonMag, используя ваш проект, мне удалось воспроизвести проблему, с которой я столкнулся с моим, если вы несколько раз быстро коснетесь между выбором ячейки и отклонением представленного представления, вы заметите, что второй 'VenueDetailsVC' начинает отставать и, следовательно, заставляя первый VC выглядеть так, загружается дважды.

Roggie 03.05.2018 08:31

@Roggie - да, я вижу, что происходит. Добавьте это в качестве первой строки в didSelectRow --- tableView.deselectRow(at: indexPath, animated: true) --- это кажется, как UIKit, возможно, буферизация текущее представление ... Кажется, это решает проблему для меня.

DonMag 03.05.2018 14:25

@DonMag, который не сработал, но добавление этого сработало 'DispatchQueue.main.async {self.presentDetail (VenueDetailsVC)}'

Roggie 04.05.2018 06:56
Стоит ли изучать 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
15
85
0

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