从 UINavigationItem 扩展中呈现 UIAlertController

Posted

技术标签:

【中文标题】从 UINavigationItem 扩展中呈现 UIAlertController【英文标题】:Presenting UIAlertController from UINavigationItem extension 【发布时间】:2021-11-22 11:02:11 【问题描述】:

我正在尝试在多个视图控制器上添加相同的右栏按钮,因此我对 UINavigationItem 进行了扩展。我的分机:

extension UINavigationItem

func barButton() 
    let barButton = UIBarButtonItem()
    barButton.image = UIImage(systemName: "person.fill")
    barButton.tintColor = .white
    barButton.action = #selector(barButtonClicked)
    barButton.target = self
    self.rightBarButtonItem = barButton


@objc func barButtonClicked() 
    let alertController = UIAlertController()
    var action = UIAlertAction(title: "Log Out", style: .destructive)  action in
        print("logout")
    
    alertController.addAction(action)
    action = UIAlertAction(title: "History", style: .default, handler:  action in
        print("history")
    )
    alertController.addAction(action)

我在 viewDidLoad 中使用 self.navigationItem.barButton() 在不同的 viewControllers 中调用 barButton 函数,它可以工作,但我不知道如何在没有 self.present() 指向特定控制器的情况下呈现此警报。 感谢您的帮助。

【问题讨论】:

【参考方案1】:

您可以从视图控制器编写选择器函数

func barButton(func: Selector) 
let barButton = UIBarButtonItem()
barButton.image = UIImage(systemName: "person.fill")
barButton.tintColor = .white
barButton.action = func
barButton.target = self
self.rightBarButtonItem = barButton 

并在视图控制器中编写 @objc 函数,如果您需要为所有人编写相同的函数。你可以在 UIViewController Extension 中创建一个函数

【讨论】:

以上是关于从 UINavigationItem 扩展中呈现 UIAlertController的主要内容,如果未能解决你的问题,请参考以下文章

从UINavigationController中控制UINavigationItem内容

UINavigationItem 未从 Navigator 中删除

Xcode 6 Segue 与 UINavigationItem

ChildviewController 的 UINavigationItem

UINavigationItem 是 UINavigationBar 上的东西

UINavigationItem:检测触摸