带有部分模板的 TableView

Posted

技术标签:

【中文标题】带有部分模板的 TableView【英文标题】:TableView With Sections Template 【发布时间】:2017-02-10 11:07:45 【问题描述】:

我关注了this Tutorial

而且效果很好。现在,如果我尝试从 JSON 中获取部分数据,这也可以正常工作,但是我在显示所有内容时遇到问题。

这就是我所做的:

//  TestVC.swift
//  WinterdienstTest
//
//  Created by zwipf on 09.02.17.
//  Copyright © 2017 Squirrel. All rights reserved.
//

import UIKit

class TestVC: UIViewController, UITableViewDataSource, UITableViewDelegate 

@IBOutlet weak var tableView: UITableView!

let sections: [String] = ["Tour 1", "Tour 2", "Tour 3"]
var adressTour1: [String] = []
var adressTour2: [String] = []
var adressTour3: [String] = []

var adressTourALL: [Int: [String]] = [:]


override func viewDidLoad() 
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self

    // URL abrufen
    let url = NSURL(string: "https://api.myjson.com/bins/mml65")
    let request = NSMutableURLRequest(url: url! as URL)
    let task = URLSession.shared.dataTask(with: request as URLRequest)  data,response,error in

    // JSON parsen und Ergebins in eine Liste von assoziativen Arrays wandeln
    let responseString = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]


    // Daten auslesen
    if let Liegenschaften = responseString["Liegenschaften"] as? [AnyObject] 

        for liegenschaft in Liegenschaften 

            if let Winterdienst = liegenschaft["Winterdienst"] as? [AnyObject] 

                for winterdienst in Winterdienst 

                    let tour = winterdienst["Tour"] as! String

                    if tour == "1" 

                        let adresse = liegenschaft["Adresse"] as! String
                        self.adressTour1.append(adresse)
                    
                    if tour == "2" 

                        let adresse = liegenschaft["Adresse"] as! String
                        self.adressTour2.append(adresse)
                    
                    if tour == "3" 

                        let adresse = liegenschaft["Adresse"] as! String
                        self.adressTour3.append(adresse)
                    
                
            
        
    

    self.adressTourALL = [0:self.adressTour1, 1:self.adressTour2, 2:self.adressTour3]


    

    // UI-Darstellung aktualisieren
    //OperationQueue.main.addOperation 
      //  self.tableView.reloadData()
    //

    // task.resume()

    print(self.adressTourALL)






func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

    return adressTourALL.count


func numberOfSections(in tableView: UITableView) -> Int 
    return sections.count


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

    var cell = tableView.dequeueReusableCell(withIdentifier: "cell")

    if cell == nil 
        cell = UITableViewCell(style: .default, reuseIdentifier: "cell");
    

    print(adressTourALL[indexPath.section]![indexPath.row])
    cell!.textLabel!.text = adressTourALL[indexPath.section]![indexPath.row]

    return cell!



希望有人可以帮助我!

【问题讨论】:

【参考方案1】:

除其他外,您需要将其放入您的代码中:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    switch section
    case 0:
        return self.adressTour1.count
    case 1:
        return self.adressTour2.count
    case 2:
        return self.adressTour2.count
    default:
        return 1

【讨论】:

这不是正确的答案..当我手动将一些字符串放入 adressTour1 - adressTour3 数组时它可以工作.. 但它不会将新值附加到数组..?

以上是关于带有部分模板的 TableView的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 带有模板的自定义插件

如何使用带有 alpha 掩码的模板缓冲区

带有模板的 Twitter Typeahead 始终只返回 1 行数据

如何在模板化类的私有部分中创建模板化结构

Shopify 页面模板部分与另一个页面的不同数据

使用 STL 容器的部分 C++ 模板特化