带有TableView部分的Swift3 SearchBar教程

时间:2017-03-05 15:32:00

标签: ios iphone uitableview swift3 uisearchbar

对于带有章节的搜索栏,有人有一个很好的教程吗?我还没找到一个好的。或者也许你可以直接帮助我完成我的项目!?

“标题”部分是静态的,但我整合了一些自定义字幕,以显示我在此部分中制作所有这些地点(Liegenschaften)所花费的区域和总时间。我在函数createWinterdienstDetail中创建了这个值。当我搜索一个位置时,此值不应更改。

我从另一个ViewController获取我的tableview的值为

var AllWinterdienstTourInfos:[Int:[Int:[String]]] = [:] // Section - Locationnumber - Locationinformations

这是我的ViewController文件:

import UIKit

class WinterdienstTourVC: UIViewController {

var sections = ["Tour 1","Tour 2","Tour 3","Tour 4"]
var LiegenschaftDetail: [String] = []

// VARIABLEN WINTERDIENST
var WinterdienstregionTour1: [String] = []
...
var WinterdienstregionTour15: [String] = []

var WinterdienstaufwandTour1String: [String] = []
...
var WinterdienstaufwandTour15String: [String] = []

var WinterdienstaufwandTour1: [Double] = []
...
var WinterdienstaufwandTour15: [Double] = []

var Totaltouraufwand1 = Double()
...
var Totaltouraufwand15 = Double()

var AllWinterdienstTourInfos: [Int:[Int:[String]]] = [:]

// Initialisierung
@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    createWinterdienstDetail()

    tableView.delegate = self
    tableView.dataSource = self
    tableView.tableFooterView = UIView(frame: CGRect.zero)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if (segue.identifier == "WinterdienstDetailSegue1") {
        let DetailviewController = segue.destination as! WinterdienstLiegenschaftDetailVC

        DetailviewController.LiegenschaftDetail = LiegenschaftDetail
    }
}

 func createWinterdienstDetail() {

    if  let liegenschaftenTour1 = AllWinterdienstTourInfos[0],
        let liegenschaftenTour2 = AllWinterdienstTourInfos[1],
        let liegenschaftenTour3 = AllWinterdienstTourInfos[2],
        let liegenschaftenTour4 = AllWinterdienstTourInfos[3]{

    self.myGroup.enter()

        // DETAILS TOUR 1
        for liegenschaften in liegenschaftenTour1.keys {

            WinterdienstregionTour1.append(AllWinterdienstTourInfos[0]![liegenschaften]![6])

            WinterdienstaufwandTour1String.append(AllWinterdienstTourInfos[0]![liegenschaften]![15])

            for i in 0 ..< WinterdienstregionTour1.count-1 {
                var j = WinterdienstregionTour1.count - 1
                while(j > i) {
                    if WinterdienstregionTour1[i] == WinterdienstregionTour1[j] {
                        WinterdienstregionTour1.remove(at: j)
                    }
                    j -= 1
                }
            }
        }

        for WinterdienstaufwandTour1Array in WinterdienstaufwandTour1String {
            WinterdienstaufwandTour1.append((WinterdienstaufwandTour1Array as NSString).doubleValue)
        }

        Totaltouraufwand1 = WinterdienstaufwandTour1.reduce(0,+)


    // DETAILS TOUR 2
    // DETAILS TOUR 3
    // DETAILS TOUR 4

    self.myGroup.leave()

    self.myGroup.notify(queue: .main) {}


    DispatchQueue.main.async {}


} // ENDE Function Create Winterdienst

} // ENDE CLASS WinterdienstTourVC


// DataSource-Methoden
extension WinterdienstTourVC: UITableViewDataSource {

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

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let view = UIView()

        // SECTION HEADER ALLGEMEIN
        view.backgroundColor = UIColor.lightGray

        // SECTION HEADER TOUR - NR
        let tournr = UILabel()
        tournr.text = sections[section]
        tournr.font = UIFont.boldSystemFont(ofSize: 20.0)
        tournr.frame = CGRect(x: 15,y:0, width: 100, height: 30)
        view.addSubview(tournr)

        // SECTION HEADER - TOURREGION / TOURAUFWAND
        let tourregion = UILabel()

        WinterdienstregionTour1.sort()
        WinterdienstregionTour1.sort()
        WinterdienstregionTour3.sort()
        WinterdienstregionTour4.sort()


        switch section{
        case 0:
            let tourregion1 = WinterdienstregionTour1.joined(separator: ", ")
            tourregion.text = "\(tourregion1)"
        case 1:
            let tourregion2 = WinterdienstregionTour2.joined(separator: ", ")
            tourregion.text = "\(tourregion2)"

        .....

    default:
        tourregion.text = "Keine Angaben"
    }

    tourregion.font = UIFont.systemFont(ofSize: 16)
    tourregion.frame = CGRect(x: 15,y:22, width: 200, height: 30)
    view.addSubview(tourregion)


    let touraufwand = UILabel()

    switch section{
    case 0:
        touraufwand.text = "\(Totaltouraufwand1) h"

    case 1:
        touraufwand.text = "\(Totaltouraufwand2) h"
    ....

    default:
        touraufwand.text = "Keine Angaben"
    }

    touraufwand.frame = CGRect(x: -5,y:12, width: 370, height: 30)
    touraufwand.font = UIFont.boldSystemFont(ofSize: 22.0)
    touraufwand.textAlignment = .right
    view.addSubview(touraufwand)

    return view
}


func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 50
}


func tableView(_ tableView: UITableView,
               numberOfRowsInSection section: Int) -> Int
{
    switch section{
    case 0:
        return self.AllWinterdienstTourInfos[0]!.count
    // self.WinterdienstadressTourAll[0]!.count
    case 1:
        return self.AllWinterdienstTourInfos[1]!.count
        //self.WinterdienstAlltourinfosAll[1]![section]!.count   
    ....

    default:
        return 1
    }
}

func tableView(_ tableView: UITableView,
               cellForRowAt indexPath: IndexPath)
    -> UITableViewCell
{
    // versuchen, eine Zelle wiederzuverwenden
    var cell = tableView.dequeueReusableCell(
        withIdentifier: "cell")
    if cell == nil {
        // nicht möglich, daher neue Zelle erzeugen
        cell = UITableViewCell(
            style: .default, reuseIdentifier: "cell")
    }

    // Eigenschaften der Zelle einstellen

    cell!.textLabel!.text = AllWinterdienstTourInfos[indexPath.section]![indexPath.row]?[4]
    cell!.textLabel!.adjustsFontSizeToFitWidth = true
    cell!.textLabel!.textAlignment = .left
    // Zelle zurückgeben
    return cell!
}
}

// TableView-Delegates
extension WinterdienstTourVC: UITableViewDelegate {

   func tableView(_ tableView: UITableView,
               didSelectRowAt indexPath: IndexPath)
{   
    LiegenschaftDetail = AllWinterdienstTourInfos[indexPath.section]![indexPath.row]!

    performSegue(withIdentifier: "WinterdienstDetailSegue1", sender: self)


}
}

0 个答案:

没有答案