2016-07-31 59 views
0

我为线图和条形图创建了两个单独的xib文件,并将其链接到场景中的视图。我根据数据类型分配了笔尖。我在我的UIView类中有一个函数setChart(),我需要从我的ViewController调用以绘制图表。从ViewController调用UIView方法

如何从我的ViewController调用函数setChart()?我的代码不能正常工作

的UIView:

class BarChartDashboard: UIView { 

@IBOutlet weak var barChartView: BarChartView! 

override func awakeFromNib() { 
    ..... 
} 

func setChart(dataPoints: [String], values: [Double]) { 

    ..... 
} 


} 

的ViewController:

class DetailDashboardViewController: UIViewController { 

@IBOutlet weak var chartView: UIView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    runQueries(2) 

    if index != 3{ 
     chartView = NSBundle.mainBundle().loadNibNamed("BarChartDashboard", owner: self, options: nil)[0] as? UIView 
    } 
    else{ 
     chartView = NSBundle.mainBundle().loadNibNamed("LineChartDashboard", owner: self, options: nil)[0] as? UIView 
    } 
} 
} 

private extension DetailDashboardViewController { 

func runQueries(period: Int) { 

    self.query(false, periodIndex: period){ (success) -> Void in 
     if success { 
      // do second task if success 
      dispatch_async(dispatch_get_main_queue(), { 
       if self.index != 3{ 
        (self.chartView as! BarChartDashboard).setChart(self.yAxis, values: self.xAxis) 
       } 
       else{ 
        (self.chartView as! LineChartDashboard).setChartData(self.yAxis, yAxisMax: self.xAxisMax, yAxisMin : self.xAxisMin) 
       } 
      }) 
     } 
    } 
} 


func query(min: Bool, periodIndex: Int, completion: (success: Bool) -> Void) { 
    ....... 
} 

} 

回答

1

创建您的ViewController一个新的变量chart并添加此表作为subViewviewoutlet从厦门国际银行

你的ViewController类看起来像下面连接:

class DetailDashboardViewController: UIViewController { 

@IBOutlet weak var chartView: UIView! 
var chart: UIView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

     if index != 3{ 
      chart = NSBundle.mainBundle().loadNibNamed("BarChartDashboard", owner: self, options: nil)[0] as? BarChartDashboard 
    } 
     else{ 
      chart = NSBundle.mainBundle().loadNibNamed("LineChartDashboard", owner: self, options: nil)[0] as? LineChartDashboard 
     } 

    self.chartView.addSubView(chart) 
    self.chart.frame = self.chartView.bounds 
    runQueries(2) 
    } 

private extension DetailDashboardViewController { 

func runQueries(period: Int) { 

    self.query(false, periodIndex: period){ (success) -> Void in 
     if success { 
      // do second task if success 
      dispatch_async(dispatch_get_main_queue(), { 
       if self.index != 3{ 
        (self.chart as! BarChartDashboard).setChart(self.yAxis, values: self.xAxis) 
       } 
       else{ 
        (self.chart as! LineChartDashboard).setChartData(self.yAxis, yAxisMax: self.xAxisMax, yAxisMin : self.xAxisMin) 
       } 
      }) 
     } 
    } 
} 
1

在你DetailDashboardViewController你们已经做出了视图类型的UIView的实例,而您的自定义UIView类被命名为BarChartDashboard,所以为了能够调用方法setChart(),您应该将您在班级督察中的视图级别设置为BarChartDashboard以及您的DetailDashboardViewController实例变量应更改如下:

@IBOutlet weak var chartView: BarChartDashboard! 

所以,现在的实例变量的类型BarChartDashboard,现在方法setChart()可以从DetailDashboardViewController被调用。

在你DetailDashboardViewController

@IBOutlet weak var chartView: BarChartDashboard! 
override func viewDidLoad() { 
    super.viewDidLoad() 

    runQueries(2) 

    if index != 3{ 
     chartView = NSBundle.mainBundle().loadNibNamed("BarChartDashboard", owner: self, options: nil)[0] as? UIView 
    } 
    else{ 
     chartView = NSBundle.mainBundle().loadNibNamed("LineChartDashboard", owner: self, options: nil)[0] as? UIView 
    } 
    chartView.setChart(dataPoints: ["hello","world"], values: [20.0,21.5]) 
} 
相关问题