同一视图中的多个图表 IOS 个图表
Multiple charts in same view IOS Charts
我一直在尝试开发一个包含多个图表(条形图、折线图、饼图)的视图控制器。我创建了一个 table 视图和自定义 table 视图单元格。自定义 table 视图单元格内有一个 UIView
。但是,当我尝试将 UIView
转换为 BarchartView
时,它给了我一个错误
Could not cast value of type 'UIView' (0x10a8e7f40) to 'Charts.LineChartView' (0x1074f63a0).
如何在同一 table 视图中实现多个图表?提前致谢。
cellForRowAt indexPath:
let cell = myTableView.dequeueReusableCell(withIdentifier: "chart") as? GraphicCell
var lineChart:LineChartView = cell?.chart as! LineChartView
lineChart.noDataText = "A"
return cell!
the view outlet that I have created in GraphicCell is UIView type
显示的图表取决于用户的选择。用户可以 select 一个条形图和两个折线图或只有两个折线图没有条形图。我完全不明白如何实现这一目标。我已将我的项目添加到 GitHub project link
chartView 不能是 UIView 类型,声明它时必须具有正确的类型。您可以在 tableView 单元格内有 3 个不同的视图,如下所示:
@IBOutlet weak var barChart: BarChartView!
@IBOutlet weak var pieChart: PieChartView!
@IBOutlet weak var lineChart: LineChartView!
然后使用您需要的那个,具体取决于您想要的图表类型。如果您使用 Storyboard,您还需要为 Storyboard 中的每个视图选择 class 作为 BarChartView、LineChartView 或 PieChartView。
您需要为要在 TableView 中使用的每种图表类型创建原型单元格。在每个原型单元格中,您需要放置 UIView,然后将 UIView 的 class 更改为 LineChartView、BarChartView 等
您还需要为每个原型单元定义自己的 class,例如:
class MyLineChartCell: UITableViewCell {
@IBOutlet weak var lineChartView: LineChartView!
func configure (/* ... */) {
lineChartView.noDataText = "You have no data"
// ...
}
}
.
将此 classes 用于您的原型单元格:
然后在func中func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
你可以选择此时使用哪个原型
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyLineChartCellIdentifier") as! MyLineChartCell
cell.configure(/* Data, Colors, etc. */)
}
if indexPath.row == 1 {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyBarChartCellIdentifier") as! MyBarChartCell
cell.configure(/* Data, Colors, etc. */)
}
//... some other types of cells
return cell
}
我一直在尝试开发一个包含多个图表(条形图、折线图、饼图)的视图控制器。我创建了一个 table 视图和自定义 table 视图单元格。自定义 table 视图单元格内有一个 UIView
。但是,当我尝试将 UIView
转换为 BarchartView
时,它给了我一个错误
Could not cast value of type 'UIView' (0x10a8e7f40) to 'Charts.LineChartView' (0x1074f63a0).
如何在同一 table 视图中实现多个图表?提前致谢。
cellForRowAt indexPath:
let cell = myTableView.dequeueReusableCell(withIdentifier: "chart") as? GraphicCell
var lineChart:LineChartView = cell?.chart as! LineChartView
lineChart.noDataText = "A"
return cell!
the view outlet that I have created in GraphicCell is UIView type
显示的图表取决于用户的选择。用户可以 select 一个条形图和两个折线图或只有两个折线图没有条形图。我完全不明白如何实现这一目标。我已将我的项目添加到 GitHub project link
chartView 不能是 UIView 类型,声明它时必须具有正确的类型。您可以在 tableView 单元格内有 3 个不同的视图,如下所示:
@IBOutlet weak var barChart: BarChartView!
@IBOutlet weak var pieChart: PieChartView!
@IBOutlet weak var lineChart: LineChartView!
然后使用您需要的那个,具体取决于您想要的图表类型。如果您使用 Storyboard,您还需要为 Storyboard 中的每个视图选择 class 作为 BarChartView、LineChartView 或 PieChartView。
您需要为要在 TableView 中使用的每种图表类型创建原型单元格。在每个原型单元格中,您需要放置 UIView,然后将 UIView 的 class 更改为 LineChartView、BarChartView 等
您还需要为每个原型单元定义自己的 class,例如:
class MyLineChartCell: UITableViewCell {
@IBOutlet weak var lineChartView: LineChartView!
func configure (/* ... */) {
lineChartView.noDataText = "You have no data"
// ...
}
}
.
将此 classes 用于您的原型单元格:
然后在func中func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
你可以选择此时使用哪个原型
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyLineChartCellIdentifier") as! MyLineChartCell
cell.configure(/* Data, Colors, etc. */)
}
if indexPath.row == 1 {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyBarChartCellIdentifier") as! MyBarChartCell
cell.configure(/* Data, Colors, etc. */)
}
//... some other types of cells
return cell
}