Вызовите метод UIView из ViewController
0 Nithin Reddy Gaddam [2016-07-31 13:37:00]
Я создал два отдельных файла xib для линейного графика и гистограммы и связал его с представлением в моей сцене. Я назначил нить в зависимости от типа данных. У меня есть функция setChart()
в моем классе UIView, которую мне нужно вызвать из моего ViewController для рисования диаграмм.
Как я могу вызвать функцию setChart()
из моего ViewController? Мой код не работает
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) {
.......
}
}
ios swift uiview
2 ответа
1 Решение Mohammed Shakeer [2016-07-31 16:06:00]
Создать новую переменную chart
в вашей ViewController и добавить эту таблицу в subView
на view
outlet
, подключенного от XIb
Класс 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 Mohamad Sheikh [2016-07-31 16:02:00]
В вашем DetailDashboardViewController
вы сделали экземпляр своего представления как тип UIView
то время как ваш пользовательский класс UIView
называется BarChartDashboard
, поэтому, чтобы иметь возможность вызывать метод setChart()
вы должны установить класс вашего представления в инспекторе класса BarChartDashboard
как так как в DetailDashboardViewController
экземпляра 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])
}