hhyyg
10/7/2017 - 8:32 AM

SearchViewController for iOS 11. Enable large title. Thanks: 【Swift】UISearchControllerの使い方。検索結果用ビューコントローラーを呼び出す。 | はじはじアプリ体験記 http://hajihaj

SearchViewController for iOS 11. Enable large title. Thanks: 【Swift】UISearchControllerの使い方。検索結果用ビューコントローラーを呼び出す。 | はじはじアプリ体験記 http://hajihaji-lemon.com/smartphone/swift/uisearchcontroller/

//
//  SearchViewController.swift
//  Gistan
//
//  Created by Hiroka Yago on 2017/10/07.
//  Copyright © 2017 miso. All rights reserved.
//

import UIKit

class SearchViewController: UITableViewController, UISearchResultsUpdating {

    var searchController = UISearchController(searchResultsController: nil)

    var searchResults = [String]()

    let dataList = ["月刊コロコロコミック(小学館)",
                    "コロコロイチバン!(小学館)",
                    "最強ジャンプ(集英社)",
                    "Vジャンプ(集英社)",
                    "週刊少年サンデー(小学館)",
                    "週刊少年マガジン(講談社)",
                    "週刊少年ジャンプ(集英社)",
                    "週刊少年チャンピオン(秋田書店)",
                    "月刊少年マガジン(講談社)",
                    "月刊少年チャンピオン(秋田書店)",
                    "月刊少年ガンガン(スクウェア)",
                    "月刊少年エース(KADOKAWA)",
                    "月刊少年シリウス(講談社)",
                    "週刊ヤングジャンプ(集英社)",
                    "ビッグコミックスピリッツ(小学館)",
                    "週刊ヤングマガジン(講談社)"]

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationController!.navigationBar.prefersLargeTitles = true

        searchController.searchResultsUpdater = self
        searchController.dimsBackgroundDuringPresentation = false
        navigationItem.hidesSearchBarWhenScrolling = false
        navigationItem.searchController = searchController
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TestCell", for: indexPath)
        if( searchController.searchBar.text != "" ) {
            cell.textLabel!.text = searchResults[indexPath.row]
        } else {
            cell.textLabel!.text = dataList[indexPath.row]
        }
        return cell
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if( searchController.searchBar.text != "" ) {
            return searchResults.count
        } else {
            return dataList.count
        }
    }

    func updateSearchResults(for searchController: UISearchController) {
        searchResults = dataList.filter { data in
            return data.contains(searchController.searchBar.text!)
        }

        tableView.reloadData()
    }
}