Daily List App Detail Transition
AppStore JSON APIs
Let's go ahead and wrap of this section of the course by implementing the transition of our Daily List screen into the AppDetailController upon selection. Furthermore, I'll show you how to fix the back swipe in your app if you decide to hide the navigation bar. Finally, let's go into a more advanced exercise of handling the selection of cells from the nested collection views.

Comments (14)
Alex Vaiman
4 years ago
hi like you courses - you are grate. but i have a problem with the "coming soon" when? today? in a month? -if I new this section is not completed i would not register to this course! I have lots of experience in programming not so match on ux stuff, I wont to learn and i want to do it fast. your free you-tube Chanel was great - and likely even more then enough, never the less you your free stuff were so great - that i decided supporting you and buy your courses(and learn something new off course ) - any way - you should have outlined the fact that this course material is not yet ready - in my case, when i really need to learn and learn fast - this is totally useless for me. could you maybe open me another course - instead of this one? (a complete one :))
Brian Voong
4 years ago
Tube
4 years ago
I like his method of releasing courses. I wouldn't want to wait until it's all in the can. I look forward to the release of every new lesson. And, often, our real time feedback can be addressed in the course content. I think of it as fresh and up to date. Keep an open mind and you will see what I mean as we go along. Don't give up yet. If you want to learn to build advanced iOS UI quickly, you couldn't have spent your money better.
rgarcia
4 years ago
Hi I will recommend if you want to learn more about UI and other topics, Brian does an excellent job in the youtube channel, but also organize a section which has update projects that you can use to learn a ton of new stuff like Core ML, Autolayout, Drawing. Here is the link, 28 videos have fun: https://www.letsbuildthatapp.com/course_video?id=1572
serxhio
4 years ago
I disagree with you totally, such a stupid language you're using on such a wonderful course. Make sure you open your eyes and read "Coming soon" before joining and complaining about stuff. Let the man do his thing and understand people are actually getting jobs while following his courses! Your negativity is not needed, be grateful! You're learning how to create Apple's AppStore for the price of lunch!!!
TWei
4 years ago
Come on, man. "Coming Soon" means it's going to be released later. If you want to purchase before release, I believe Brian will appreciate your early support. But if you decide to look around or want to watch the free overview video first before purchase, it's totally up to you. I don't know how good you are, but if you say "in my case, when i really need to learn and learn fast - this is totally useless for me." makes me feel you designed the whole iOS system. Another thing, think before talk. No matter how many years of experience you have, you're here to learn. Show some respect and appreciation to your teacher. Not only on internet, in your real life.
Yu Hao Chen
4 years ago
Even if I only need to understand a few of the feature implementation logic (I am now an advanced iOS developer), I will still buy and read the full course, because it is value for money.
Tube
4 years ago
Do we know why calling that multiple app page caused us to need to relayout the tabbar? Because, calling the individual detail pages did not cause a problem.
Tube
4 years ago
I like this better because it only executes when needed: present(fullListVC, animated: true) { self.tabBarController?.tabBar.superview?.setNeedsLayout() }
rgarcia
4 years ago
Where exactly you locate this piece of code. looks interesting. Thanks tube
rgarcia
4 years ago
Do you have any idea of how to enable the back button in the details page. I would like to enable both swap and the back button as well. Thanks
tatters
4 years ago
Hi Brian, The second half of the video for handleTapMultipleCell to bring up the fullscreen view seems to stop the the 1st part of the video from working when you want to tap on an app to view the details of that app?
tatters
4 years ago
I ran your project as well and it does the same thing so I think a bug might have crept in? Ta
Brian Voong
4 years ago
tatters
4 years ago
Hi Brian, the transition into the YouTube app details view (or any other app detail view) at the 7 minute mark of this episode from the full screen view no longer works at the very end of the video? So when you bring up the full list of apps it doesn’t let you click on those cells to transition to the App detail controller? I downloaded your version and it also had the same problem. I’ll try to post a video later.
Brian Voong
4 years ago
tatters
4 years ago
Nice one....thanks for the course. Best one yet.
Dennisvm82
4 years ago
I am really curious what Apple's code looks like with regards to this part of the application. Do you think their solution is a lot different or complex?
Brian Voong
4 years ago
Binh Huynh
4 years ago
Hi Brian, From 12:30, I have asimpler solution. We don't have to implement handleMultipleAppsTap ! In TodayMultipleAppCell, in init(), just add multipleAppController.collectionView.isUserInteractionEnabled = false That will basically let us tap anywhere in the cell to bring up TodayMultipleAppsController
Brian Voong
4 years ago
duypham
4 years ago
Thanks for the tips from both of you. Btw, it's nice to see vietnamese people in here.
Binh Huynh
4 years ago
Cool, lets build some apps
Stefan Milinkovic
4 years ago
Brian, I wanted to say while i was doing the part when navigationBar is supposed to be hidden at 8:20, I accidentally typed " navigationController?.navigationBar.isHidden = true" instead of "navigationController?.isNavigationBarHidden = true" and it made swiping back enabled
Brian Voong
4 years ago
Tùng Vux
4 years ago
I think of a simpler solution rather than addTapGesture at 14:30 is just simply set false to isUserInteractionEnabled by one line of code : (cell as? TodayMultipleAppCell)?.multipleAppsController.view.isUserInteractionEnabled = false It also prevent a bug you faced very first in the next episode
Brian Voong
4 years ago
Hadouryu
4 years ago
Hey Brian, I would really like to understand this whole superview thing a bit better. It would be nice if you could provide some detailed explanation. I understand the whole concept of selecting the exact cell and taking its indexPath so we can take the object we need for presenting, but I dont understan why are you checking if its not nil and what does superview= superview?.superview do? Thanks in advance and all the best, Armin
Hadouryu
4 years ago
Hey Brian, I noticed that if we remove the line superview = superview?.superview, the presentation of the fullscreen controller stops working. Can you please explain why is that happening. Thanks in advance :)
Stewart Lynch
4 years ago
I believe it is because Brian failed to present the BackEnabledNavigationController. in the handleMultipleAppsTap function, instead of present(fullController,animated: true), use self.present(BackEnabledNavigationController(rootViewController:fullController), animated: true)
knoosh
4 years ago
Getting unresolved identifier when I try to use: self.present(BackEnabledNavigationController(rootViewController:fullController), animated: true) Can find no documentation on BackEnabledNavigationController in Apple's docs or online. Anybody have any idea how to resolve this?
jademagnum
3 years ago
Looks like IOS 13 messed up the gesture recognizer, I think the fix is to make it fullscreen instead of just pushing the view controller.
ZeroSingularity
3 years ago
You can still keep the gestureRecognizer with the implementation that Brian uses on iOS 13 The implementation is similar to the response I gave to 李承諴's question in how the navigationController is presented. @objc fileprivate func handleMultipleAppsTap(gesture: UIGestureRecognizer) { let collectionView = gesture.view var superview = collectionView?.superview while superview != nil { if let cell = superview as? TodayMultipleAppCell { guard let indexPath = self.collectionView.indexPath(for: cell) else { return } let appFullscreenController = TodayMultipleAppsController(mode: .fullscreen) let fullscreenNavigationController = BackEnabledNavigationController(rootViewController: appFullscreenController) appFullscreenController.apps = self.items[indexPath.item].apps fullscreenNavigationController.modalPresentationStyle = .fullScreen navigationController?.present(fullscreenNavigationController, animated: true) return } superview = superview?.superview } }
G123
3 years ago
Hey Brian I sent you an email, but I need some help with this project if you have some extra time. Thanks
李承諴
3 years ago
fullController can't be wrapped in NavigationController In iOS13 lol
ZeroSingularity
3 years ago
fullController can be wrapped in an UINavigationController for iOS 13! You have to create a UINavigationController passing in the appFullscreenController as the rooViewController. Then access the fullscreenNavigationController's modalPresentationStyle and set it to fullScreen. Finally pass the fullscreenNavigationController in your present method. if items[indexPath.item].cellType == .multiple { let appFullscreenController = TodayMultipleAppsController(mode: .fullscreen) let fullscreenNavigationController = UINavigationController(rootViewController: appFullscreenController) appFullscreenController.results = items[indexPath.item].apps fullscreenNavigationController.modalPresentationStyle = .fullScreen navigationController?.present(fullscreenNavigationController, animated: true) }
G123
3 years ago
Hey Brian, sorry to bother you but I sent you a few emails this week following up about merging a project. If you could let me know what you think about time and price then that would be great. Thanks again!
Ata Etgi
2 years ago
Why we are not using collectionView.indexPathForItem(at: CGPOINT) to get indexPath? It works. Example: @objc fileprivate func handleMultipleAppsTap(gesture: UITapGestureRecognizer) { if let indexPath = self.collectionView.indexPathForItem(at: gesture.location(in: self.collectionView)) { let apps = self.items[indexPath!.row].apps let fullController = TodayMultipleAppsController(mode: .fullscreen) fullController.apps = apps let fullControllerNav = BackEnabledNavigationController(rootViewController: fullController) fullControllerNav.modalPresentationStyle = .fullScreen present(fullControllerNav, animated: true, completion: nil) }
HELP & SUPPORT