从appdelegate更改UILabel文本

时间:2018-12-22 12:38:58

标签: ios swift uilabel appdelegate

我有一个UIViewcontroller,比如说有一个UILabel的“ DialerViewController” @IBOutlet弱var statusText:UILabel! ,  它的默认值为“待处理”,我如何使用应用程序委托来更改statusText的值,假设应用程序委托从服务器下载了文本,并且在完成后需要更新statusText。

我不熟悉快速发展,解决此问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

如果DialerViewController是应用程序中唯一的视图控制器,则可以这样处理...

(window?.rootViewController as? DialerViewController)?.statusText?.text = "YOURTEXT"

另一种选择是使DialerViewController实例遵守一些特定的通知,并在从服务器上下载文本时将该通知发布到应用程序委托中。

// create an extension for your own notification
extension Notification.Name {
    static let textWasDownloadedNotification = Notification.Name("textWasDownloadedNotification")
}

class DialerViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // make your dialer view controller listen to your new notification
        NotificationCenter.default.addObserver(self, selector: #selector(updateLabel), name: .textWasDownloadedNotification, object: nil)
    }

    // function that gets called when a notification is received
    @objc func updateLabel(_ notification: Notification) {
        // get the new text from the notification's `userInfo` dictionary
        let text = notification.userInfo?["text"] as? String
        // update the label
        statusText.text = text
    }

}

// somewhere in your app delegate...

// prepare the `userInfo` dictionary with the information that is needed
let userInfo = ["text": "This is the new text."]
// post the notification
NotificationCenter.default.post(name: .textWasDownloadedNotification,
                                    object: nil,
                                    userInfo: userInfo)

请参见https://developer.apple.com/documentation/foundation/notificationcenter

答案 1 :(得分:0)

我认为您无法做到这一点,因为AppDelegate方法是在应用程序的特定状态下调用的,而其中一种可能是好的:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool

但是调用它时,您的viewController尚未加载。

答案 2 :(得分:0)

从网络加载不是AppDelegate的责任,添加新的网络服务类并将其注入到视图控制器中。只需掌握有关图层体系结构的知识即可。对于新开发者来说功能非常强大,祝您好运。