繁体   English   中英

当以编程方式创建的按钮快速单击时导航到 viewController

[英]Navigate to viewController when programmatically created button click in swift

我正在使用 swift 创建一个框架模块。 需要在点击按钮时弹出警报或 ViewController。 按钮正在以编程方式创建。 当前按钮正在显示,但操作不起作用。 下面是代码。
在框架类中

public class CreateAdminMenu {

    let alertVC = AlertView()

    public init() {

    }

    public func createMenuItem(itemTitle: String) -> UIButton{
        let menuItem = UIButton(type: .system)
        menuItem.frame = CGRect(x: 30, y: 30, width: 150, height: 100)
        menuItem.backgroundColor = .blue
        menuItem.setTitle(itemTitle, for: .normal)
        menuItem.addTarget(self, action: #selector(menuItem_touchUpInside(sender:)), for: UIControl.Event.touchDown)
        return menuItem
    }

    @IBAction func menuItem_touchUpInside(sender: UIButton) {
        print("Menu Item tapped")
        alertVC.showAlert()
    }
}

class AlertView: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //self.showAlert()
    }

    func showAlert() {
        let alert = UIAlertController(title: "Test Item", message: "button tapped", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))

        self.present(alert, animated: true)
    }
}

在 App 中,ViewController

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        let menu = CreateAdminMenu()
        let item = menu.createMenuItem(itemTitle: "Test Item 1")
        view.addSubview(item)
    }
}

我错过了什么?

首先,你绝对不应该在框架中添加IBAction

两个问题

  1. 您只需初始化AlertView而无需在ViewController添加/嵌入它。
  2. 您正在另一个视图中显示UIAlertController
       public class CreateAdminMenu {

            public init() {

            }

            public func createMenuItem(itemTitle: String) -> UIButton {
                let menuItem = UIButton(type: .system)
                menuItem.frame = CGRect(x: 30, y: 30, width: 150, height: 100)
                menuItem.backgroundColor = .blue
                menuItem.setTitle(itemTitle, for: .normal)
                return menuItem
            }
        }

        class AlertView  {
            func showAlert() -> UIAlertController {
                let alert = UIAlertController(title: "Test Item", message: "button tapped", preferredStyle: .alert)
                alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
                return alert
            }
        }


        class ViewController: UIViewController {

            override func viewDidLoad() {
                super.viewDidLoad()
                // Do any additional setup after loading the view.

                let menu = CreateAdminMenu()
                let item = menu.createMenuItem(itemTitle: "Test Item 1")
                item.addTarget(self, action: #selector(menuItem_touchUpInside(sender:)), for: UIControl.Event.touchDown)
                view.addSubview(item)
            }

            @IBAction func menuItem_touchUpInside(sender: UIButton) {
                    let alert = AlertView()
                self.present(alert.showAlert(), animated: true, completion: nil)
            }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM