2017-10-19 70 views
-1

我在我的TuesdayViewController.swift中创建了一个按钮。如何调用从另一个视图控制器创建按钮的函数?

每当它是星期二,我想该按钮出现在我的ViewController.swift

我有我的TuesdayViewController此功能:

func tuesdayView(){ 
    let button = UIButton(frame: CGRect(x: 16, y: 200, width: 343, height: 45)) 
    button.backgroundColor = .red 
    button.setTitle("Test button", for: .normal) 
    self.view.addSubview(button) 

} 

如果我把这个功能在周二的viewDidLoad()时,按钮显示在TuesdayViewController中。

我该如何做到这一点,所以我通过我的主ViewController调用这个函数,并在主ViewController屏幕上显示按钮?

我已经在我的主视图控制器试过,但该按钮没有出现:

override func viewDidLoad(){ 

super.viewDidLoad() 
TuesdayViewController().tuesdayVew() 


} 

任何帮助,将不胜感激!

回答

0

如果我理解你的问题吧,你只是想从你的TuesdayViewController添加相同类型的按钮到您的MainViewController,而不是通过调用它在MainViewController添加的按钮TuesdayViewController

为了做到这一点,你就可以宣布你tuesdayView为您TuesdayViewController的公共属性,像这样:

TuesdayViewController.swift

class TuesdayViewController: UIViewController { 
    public lazy var tuesdayView: UIButton = { 
     let button = UIButton(frame: CGRect(x: 16, y: 200, width: 343, height: 45)) 
     button.backgroundColor = .red 
     button.setTitle("Test button", for: .normal) 
     return button 
    }() 

    override func viewDidLoad(){ 
     super.viewDidLoad() 
     self.view.addSubview(self.tuesdayView) 
    } 
} 

并调用,就像你是什么属性一直在做。

MainViewController.swift

class MainViewController: UIViewController { 
    override func viewDidLoad(){ 
     super.viewDidLoad() 
     let button = TuesdayViewController().tuesdayView 
     self.view.addSubview(button) 
    } 
} 
0

你需要使用一个观察者与NotificationCenter

首先,你需要创建一个通知名称

extension Notification.Name { 
    static let notName = Notification.Name("notName") 
} 

TuesdayViewController:

override func viewDidLoad() { 
    NotificationCenter.default.addObserver(self, selector: #selector(tuesdayViewObserver), name: .notName, object: nil) 

} 

@objc func tuesdayViewObserver(_ notification: Notification) { 
    //Here you call the tuesdayView function 
    tuesdayView() 
} 

并在控制器中要启动该方法,您发布通知并执行该方法:

override func viewDidLoad() { 
    super.viewDidLoad() 
    NotificationCenter.default.post(name: .notName, object: nil) 
} 

有关更多信息,我建议您看看NotificationCenter以及它的工作原理。 LINK

+0

'@objc FUNC tuesdayViewObserver(_通知:通知)'应该删除的NS前缀,如果斯威夫特4编码,你需要在你的方法前加@objc 。也在你的选择器(通知:)它不需要它可以由编译器'#选择器(tuesdayViewObserver)'推断'https://stackoverflow.com/a/30541063/2303865 –

+1

谢谢利奥,我更新了我的答案 –

相关问题