我有2个ViewControllers。 ViewController A获取信息,ViewController B使用Charts框架在线图中设置信息。
我这样做是为了在一天结束时更新线图。这样可以正常工作,但是,用户必须打开ViewController B才能使用前一天收到的新信息更新折线图。
如何在应用程序打开时创建它。图表会自动更新,无需打开ViewController B.我尝试在ViewController A中调用函数从ViewController B生成图表,但是我得到一个错误,说明chart.info是零。
我试图找到一种方法来做到这一点。但我找不到任何东西。
这是ViewController B.它由ViewController A中的segue打开:
func makeChart(){
let today = Calendar.current.component(.day, from: Date())
let compare = UserDefaults.standard.integer(forKey: "userDate")
print(today)
print(ViewController.totalReps)
// var points = UserDefaults.standard.array(forKey: "array") as! [Int]
var points: [Int] = []
//Checks if the day passed
if today != compare{
UserDefaults.standard.set(today, forKey: "userDate")
points = UserDefaults.standard.array(forKey: "array") as? [Int] ?? [Int]()
let userReps = UserDefaults.standard.integer(forKey: "userReps")
points.append(userReps)
UserDefaults.standard.set(points, forKey: "array")
//UserDefaults.standard.set(points, forKey: "array")
var chartEntry = [ChartDataEntry]()
print(points)
for i in 0..<points.count {
let value = ChartDataEntry(x: Double(i), y: Double(points[i]))
chartEntry.append(value)
}
let line = LineChartDataSet(values: chartEntry, label: "Reps")
line.colors = [NSUIColor.blue]
let info = LineChartData()
info.addDataSet(line)
Chart.data = info
Chart.chartDescription?.text = "Reps"
//reset values
ViewController.totalReps = 0
UserDefaults.standard.set(0, forKey: "userReps")
}
答案 0 :(得分:0)
您无需创建视图控制器B来创建图表 我假设您在全局范围内保存值,并且可以在ViewController B中访问
只需创建一个Empty Swift文件并创建一个描述为
的类class newLineChart: NSObject
{
/// A Shared Instance
/// This will Initiate class
/// Using this we will directly use this class Created Components
static var shared = LineChart()
/// This is Main function through which chart is being created
/// Just return chart created at the endf of function
/// I used Swift Charts and i just used global Values of charts
/// Accessed in Required func where chart is getting created
/// At the end return chart
/// Add the returned chart in my subviews
func makeChanges() -> Chart
{
/// Your code goes Here
/// Chart Instance
/// Upadte Axis and all Labels as per requirement
return Chart
}
}
现在在View Controller A中
/// Add Returned chart Subview
self.myCustomContainerView.addSubview(newLineChart.shared.makeChanges.view)
我使用过 SwiftCharts Framework 我的班级看起来像这样
class DoubleSidedChart: NSObject
{
/// Shared Instance
static var shared = DoubleSidedChart()
override init() { }
deinit {
//Used
}
}
//MARK:- Get into CSV File
extension DoubleSidedChart
{
func createCharts(leftView:UIView,rightView:UIView) -> (Chart,Chart)
{
return (leftChart(realChartPoints: chartPointsForLeftChart, secondModel: secondLineCPLeft, leftChartView: leftView),rightChart(realChartPoints: chartPointsForRightChart, secondModel: secondLineCPRight, rightChartView: rightView))
}
}
//MARK:- Get charts - DoubleSidedChart
extension DoubleSidedChart
{
func leftChart(realChartPoints: [(Double,Double)],secondModel : [(Double,Double)], leftChartView: UIView) -> Chart
{
self.leftAxischart?.clearView()
leftAxischart = nil
/// My code for Left axis Chart
//SubLayers
self.leftAxischart = Chart(
frame: chartFrame,
innerFrame: innerFrame,
settings: chartSettings,
layers: [
xAxisLayer,
yAxisLayer,
guidelinesLayer,
chartPointsLineLayer,
chartPointsLineLayer1
]
)
return leftAxischart!
}
func rightChart(realChartPoints: [(Double,Double)],secondModel : [(Double,Double)], rightChartView: UIView) -> Chart
{
self.rightAxisChart?.clearView()
rightAxisChart = nil
/// My code
rightAxisChart = Chart(
frame: chartFrame,
innerFrame: innerFrame,
settings: chartSettings,
layers: [
xAxisLayer,
yAxisLayer,
guidelinesLayer,
chartPointsLineLayer,
chartPointsLineLayer1
]
)
rightAxisChart?.view.backgroundColor = UIColor.clear
return rightAxisChart!
}
}
我的课程用法
var DSC : DoubleSidedChart?
DSC = DoubleSidedChart()
/// Add Subview
let DSCV = DSC?.createCharts(leftView: leftChartView, rightView: rightChartView)
leftChartView.addSubview((DSCV?.0.view)!)
rightChartView.addSubview((DSCV?.1.view)!)