Я создал небольшое приложение, которое показывает 2 диаграммы (линейные и круговые диаграммы), используя диаграммы (см. Figure_1 ), и теперь я хотел бы сделать те же 2 диаграммы, используя контроллер tableView, с 2 разделами икаждый раздел будет иметь линию и круговую диаграмму соответственно (так что, в основном: 2 раздела с одним графиком внутри ячейки / строки в разделе).
До этого момента я мог создавать 2 разделас одной строкой с каждой диаграммой вида (см. Figure_2 ).Но теперь, когда я пытаюсь манипулировать кодом, чтобы добавить данные в каждую строку каждого раздела, я просто получаю ошибки, и приложение вылетает.
Я новичок в Swift 4, так что я вроде какзастрял.
Это мой код:
import UIKit
import Charts
class OtherChartsTableViewController: UITableViewController{
//MARK: - Variables and Constants
let titleOfSectionsArray = [" Line Chart", " Pie Chart"]
let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
let unitsSold = [20.3, 4.9, 6.4, 3.8, 12.2, 16.1, 11.7, 17.2, 9.0, 7.6, 25.3, 10.5]
var dataEntries: [ChartDataEntry] = []
//MARK: - Outlets, actions and views
@IBOutlet weak var lineChartView: LineChartView!
@IBOutlet weak var pieChartView: PieChartView!
@IBOutlet var otherChartsTableView: UITableView!
//MARK: - viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
}
//MARK: - TableView delegates and datasources
override func numberOfSections(in tableView: UITableView) -> Int {
return titleOfSectionsArray.count
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView()
let label = UILabel()
label.text = titleOfSectionsArray[section]
label.backgroundColor = UIColor.lightGray
label.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 30)
view.addSubview(label)
print("Section tapped: \(section)")
return view
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
print("Row tapped: \(indexPath.row)")
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0{
//This line of code helped me to "detect" the reuse identifier for the cell in the Main.storyboard at the attributes inspector.
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "IdLineChartCell")
let cell = tableView.dequeueReusableCell(withIdentifier: "IdLineChartCell", for: indexPath)
//cell.selectionStyle = .none
print("LineChartCell tapped")
return cell
} else {
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "IdPieChartCell")
let cell = tableView.dequeueReusableCell(withIdentifier: "IdPieChartCell", for: indexPath)
//cell.selectionStyle = .none
print("PieChartCell tapped")
return cell
}
}
}
Я пытался добавить диаграммы просмотра, но я не знаю, появляются ли они в строке каждого раздела, все, что я пытался кодироватьпросто терпит неудачу, например, я попытался добавить 2 «без текстов данных» (как простой шаг) в метод viewDidLoad для каждой диаграммы (см. Figure_3 ) и завершился неудачей (рисунок 3 из другого приложения диаграммэто не использует табличное представление).
//MARK: - viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
pieChartView.noDataText = "You need to provide data for the pie chart"
lineChartView.noDataText = "You need to provide data for the line chart"
}
Я пытался использовать операторы if if, но я не знаю, как заставить каждый раздел искать правильные идентификаторы ячеек в каждой строке.каждого раздела.
Я знаю, что выражение «если еще», используемое в cellForRowAt indexPath: метод, совершенно неверно, но оно показывает более или менее то, что я хочу сделать, чтобы показать графики.
Журнал сбоя при использовании pieChartView.noDataText = "Вам необходимо предоставить данные для круговой диаграммы" в методе viewDidLoad:
2019-02-18 16:48:44.572821+0100 SamiChartTableViewStyle[25727:712814] libMobileGestalt MobileGestalt.c:890: MGIsDeviceOneOfType is not supported on this platform.
Other Charts
otherChartsObject: <SamiChartTableViewStyle.OtherChartsTableViewController: 0x7fcb2242fbc0>
2019-02-18 16:48:45.696538+0100 SamiChartTableViewStyle[25727:712814] Unknown class _TtC23SamiChartTableViewStyle13LineChartCell in Interface Builder file.
2019-02-18 16:48:45.696820+0100 SamiChartTableViewStyle[25727:712814] Unknown class _TtC23SamiChartTableViewStyle13LineChartCell in Interface Builder file.
2019-02-18 16:48:45.697602+0100 SamiChartTableViewStyle[25727:712814] Unknown class _TtC23SamiChartTableViewStyle12PieChartCell in Interface Builder file.
2019-02-18 16:48:45.697772+0100 SamiChartTableViewStyle[25727:712814] Unknown class El in Interface Builder file.
2019-02-18 16:48:45.697895+0100 SamiChartTableViewStyle[25727:712814] Unknown class _TtC23SamiChartTableViewStyle12PieChartCell in Interface Builder file.
(lldb)
Заранее благодарим за ваше время и терпение.