- UIKit is the old way of developing iOS apps
- SwfitUI (which we have learned in this course) replaced it and is doing most of the things
- There are still some things that might be better in UIKit or there might be some old code so it's important to understand how to use it in SwiftUI
- Instead of having MVVM there is MVC
- In MVC views are grouped together and controlled by a
Controller
- In MVC views are grouped together and controlled by a
- UIKit is object-oriented (not functional)
- UIKit uses a concept "delegation"
- Objects (controllers and views) often delegate some of their functionality to other objects
- They do this by having a var called
delegate
-
delegate
var is constrained via a protocol with all the delegatable functionality
Enroute demo UIView (12:25)
- We create
MapView
to normal Swift file (not SwiftUI) because there isn'tvar body
This will draw a map and add pins to the points mentioned in annotations
import SwfitUI import UIKit import MapKit struct MapView: UIViewRepresentable { let annotations: [MKAnnotation] func makeUIView(context: Context) -> MKMapView { let mkMapView = MKMapView() mkMapView.delegate = context.coordinator mkMapView.addAnnotations(self.annotations) return mkMapView } func updateUIView(_ uiView: MKMapView, context: Context) { } func makeCoordinator() -> Coordinator { return Coordinator() } class Coordinator: NSObject, MKMapViewDelegate { func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { let view = mapView.dequeueReusableAnnotationView(withIdentifier: "MapViewAnnotation") ?? MKPinAnnotationView(annotation: annotation, reuseIdentifier: "MapViewAnnotation") view.canShowCallout = true return view } } }
EmojiArt demo UIViewController (39:13)
import SwiftUI import UIKit typealias PickedImageHandler = (UIImage?) -> Void struct ImagePicker: UIViewControllerRepresentable { // could be handled using binding but wanted to show // that there are different ways var handlePickedImage: PickedImageHandler func makeUIViewController(context: Context) -> UIImagePickerController { let picker = UIImagePickerController() picker.sourceType = .photoLibrary picker.delegate = context.coordinator return picker } func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) { } func makeCoordinator() -> Coordinator { Coordinator(handlePickedImage: handlePickedImage) } class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate { var handlePickedImage: PickedImageHandler init(handlePickedImage: @escaping PickedImageHandler) { self.handlePickedImage = handlePickedImage } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { handlePickedImage(info[.originalImage] as? UIImage) } func ImagePickerControllerDidCancel(_ picker: UIImagePickerController) { handlePickedImage(nil) } } }
Top comments (0)