Я столкнулся с похожими проблемами, но ничего похожего на мою текущую настройку, и поэтому изо всех сил пытаюсь найти исправление.
У меня есть собственное расширение 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
}
спасибо @Khushbu, но я пробовал все другие типы переходов, кроме "kCATransitionPush", и они не работают. В настоящее время я получаю такое поведение, что первичный VC скользит вправо дважды, прежде чем внезапно появляется вторичный VC.
Я думаю, что просмотр не загружается дважды. Добавьте точки останова в метод "cellForRowAt" в табличном представлении и проверьте его.
Извините, что вы имеете в виду, добавляя точки останова?
Я имею в виду, что ваше представление не загружается дважды. Вы можете проверить это путем отладки. Итак, добавьте для этого точки останова.
Вы имеете в виду «cellForRowAt» или «didSelectRowAt»? Что конкретно я ищу?
@RIG - вы сказали «У меня нет других переходов между этими двумя венчурными капиталистами» ... когда вы говорите «никакой другой», означает ли это, что у вас определен А Segue?
Как вы оцениваете это - «первичный VC (VenueListVC) загружается дважды, прежде чем модально представить вторичный VC»?
@DonMag Я имею в виду, что в моей раскадровке не установлены переходы. Я перехожу (переход) с помощью presentDtail () и dismiss () в моем расширении ViewCrontroller.
@AnkitJayaswal, когда я нажимаю на ячейку в своем основном контроллере, тот же самый основной контроллер скользит вправо, пока внезапно не появится дополнительный контроллер. Похоже, что основной контроллер снова загружается, когда я нажимаю на ячейку.
@RIG - похоже, что-то еще происходит в коде, который вы не показали. Быстрый тест, без проблем: github.com/DonMag/CustomPresent
@DonMag, спасибо за тест, я посмотрел, и да, у меня аналогичная настройка, поэтому очень странно, что мой код ведет себя немного иначе. Похоже, что представленный вторичный VC по какой-то причине очень медленно попадает в поле зрения.
@DonMag, используя ваш проект, мне удалось воспроизвести проблему, с которой я столкнулся с моим, если вы несколько раз быстро коснетесь между выбором ячейки и отклонением представленного представления, вы заметите, что второй 'VenueDetailsVC' начинает отставать и, следовательно, заставляя первый VC выглядеть так, загружается дважды.
@Roggie - да, я вижу, что происходит. Добавьте это в качестве первой строки в didSelectRow
--- tableView.deselectRow(at: indexPath, animated: true)
--- это кажется, как UIKit, возможно, буферизация текущее представление ... Кажется, это решает проблему для меня.
@DonMag, который не сработал, но добавление этого сработало 'DispatchQueue.main.async {self.presentDetail (VenueDetailsVC)}'
Это происходит потому, что вы добавили «kCATransitionPush». поэтому он показывает переход по нажатию, а затем представляет представление.