如何调用从另一个viewcontroller创建按钮的函数?

时间:2017-10-19 03:13:15

标签: swift

我的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屏幕中显示该按钮?

我在我的主ViewController中尝试了这个,但按钮没有出现:

override func viewDidLoad(){

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


}

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果我理解您的问题,您只需要将MainViewController中的相同类型的按钮添加到TuesdayViewController,而不是通过调用MainViewController将按钮添加到tuesdayViewTuesdayViewController

为此,您可以将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) } } 声明为class MainViewController: UIViewController { override func viewDidLoad(){ super.viewDidLoad() let button = TuesdayViewController().tuesdayView self.view.addSubview(button) } } 的公共财产,如下所示:

<强> TuesdayViewController.swift

    const data = {
    labels: ['January', 'February', 'March', 'April', 'May', 'June', July'],
     datasets: [{
      label: 'Sales',
      type:'line',
      data: [51, 65, 40, 49, 60, 37, 40],
      fill: false,
      borderColor: '#EC932F',
      backgroundColor: '#EC932F',
      pointBorderColor: '#EC932F',
      pointBackgroundColor: '#EC932F',
      pointHoverBackgroundColor: '#EC932F',
      pointHoverBorderColor: '#EC932F',
      yAxisID: 'y-axis-2'
    },{
      type: 'bar',
      label: 'Visitor',
      data: [200, 185, 590, 621, 250, 400, 95],
      fill: false,
      backgroundColor: '#71B37C',
      borderColor: '#71B37C',
      hoverBackgroundColor: '#71B37C',
      hoverBorderColor: '#71B37C',
      yAxisID: 'y-axis-1'
    }]
};

const options = {
  responsive: true,
  tooltips: {
    mode: 'label'
  },
  elements: {
    line: {
      fill: false
    }
  },
  scales: {
    xAxes: [
      {
        display: true,
        gridLines: {
          display: false
        },
        labels: {
          show: true
        }
      }
    ],
    yAxes: [
      {
        type: 'linear',
        display: true,
        position: 'left',
        id: 'y-axis-1',
        gridLines: {
          display: false
        },
        labels: {
          show: true
        }
      },
      {
        type: 'linear',
        display: true,
        position: 'right',
        id: 'y-axis-2',
        gridLines: {
          display: false
        },
        labels: {
          show: true
        }
      }
    ]
  }
};

并将此属性称为您之前所做的事情。

<强> MainViewController.swift

{{1}}