Browse Source

update hint on viewWillAppear

nayooti 5 năm trước cách đây
mục cha
commit
024f964c3a

+ 12 - 4
deltachat-ios/Controller/QrPageController.swift

@@ -9,7 +9,7 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
 
     private var selectedIndex: Int = 0
 
-    private var getQrCodeHint: String {
+    private var qrCodeHint: String {
         var qrCodeHint = ""
         if dcContext.isConfigured() {
             // we cannot use dc_contact_get_displayname() as this would result in "Me" instead of the real name
@@ -55,7 +55,7 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
         delegate = self
         navigationItem.titleView = qrSegmentControl
 
-        let qrController = QrViewController(dcContext: dcContext, qrCodeHint: getQrCodeHint)
+        let qrController = QrViewController(dcContext: dcContext, qrCodeHint: qrCodeHint)
         setViewControllers(
             [qrController],
             direction: .forward,
@@ -69,6 +69,7 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
         if let qrCodeReaderController = self.qrCodeReaderController {
             qrCodeReaderController.startSession()
         }
+        updateHintText()    // needed in case user changes profile name
     }
 
     override func viewWillDisappear(_ animated: Bool) {
@@ -83,7 +84,7 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
     // MARK: - actions
     @objc private func qrSegmentControlChanged(_ sender: UISegmentedControl) {
         if sender.selectedSegmentIndex == 0 {
-            let qrController = QrViewController(dcContext: dcContext, qrCodeHint: getQrCodeHint)
+            let qrController = QrViewController(dcContext: dcContext, qrCodeHint: qrCodeHint)
             setViewControllers([qrController], direction: .reverse, animated: true, completion: nil)
         } else {
             let qrCodeReaderController = makeQRReader()
@@ -99,6 +100,13 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
         return qrReader
     }
 
+    // MARK: - update
+    private func updateHintText() {
+        for case let qrViewController as QrViewController in self.viewControllers ?? [] {
+            qrViewController.qrCodeHint = qrCodeHint
+        }
+    }
+
     // MARK: - coordinator
     private func showChats() {
         if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
@@ -119,7 +127,7 @@ extension QrPageController: UIPageViewControllerDataSource, UIPageViewController
         if viewController is QrViewController {
             return nil
         }
-        return QrViewController(dcContext: dcContext, qrCodeHint: getQrCodeHint)
+        return QrViewController(dcContext: dcContext, qrCodeHint: qrCodeHint)
     }
 
     func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {

+ 14 - 3
deltachat-ios/Controller/QrViewController.swift

@@ -21,7 +21,11 @@ class QrViewController: UIViewController {
         return view
     }()
 
-    private let qrCodeHint: String
+    var qrCodeHint: String {
+        willSet {
+            qrContentView.hintText = newValue
+        }
+    }
     private let chatId: Int
 
     init(dcContext: DcContext, chatId: Int? = 0, qrCodeHint: String?) {
@@ -86,18 +90,25 @@ class QrViewController: UIViewController {
 // MARK: - QrViewContentView
 class QrViewContentView: UIView {
 
+    var hintText: String? {
+        willSet {
+            hintLabel.text = newValue
+        }
+    }
+
     private var qrCodeView: QRCodeView = {
         let view = QRCodeView(frame: .zero)
         return view
     }()
 
-    private var hintLabel: UILabel = {
+    private lazy var hintLabel: UILabel = {
         let label = UILabel.init()
         label.lineBreakMode = .byWordWrapping
         label.numberOfLines = 0
         label.textAlignment = .center
         label.font = .preferredFont(forTextStyle: .subheadline)
         label.adjustsFontForContentSizeCategory = true
+        label.text = hintText
         return label
     }()
 
@@ -115,7 +126,7 @@ class QrViewContentView: UIView {
 
     init(qrCode: String?, hint: String) {
         super.init(frame: .zero)
-        hintLabel.text = hint
+        hintText = hint
         if let qrCode = qrCode {
             qrCodeView.generateCode(
                 qrCode,