Как работать с одним табличным представлением с двумя разделами и несколькими идентификаторами ячеек? - PullRequest
0 голосов
/ 18 февраля 2019

Я создал небольшое приложение, которое показывает 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)

Заранее благодарим за ваше время и терпение.

...