QA@IT

swift seachBarの挙動についての質問

2039 PV

swift seachBarの挙動についての質問

こんばんは。
swiftに関しての質問です。
当方swift初心者なのですが、検索機能の絞り込み方法について質問させていただければと思います。
あらかじめ「タイトル」とは別に「カテゴリ」に値を登録し、そのカテゴリをsearchBarを使って検索できるようにします。
下記コードで検索自体はできます。
ただ、カテゴリでの検索結果を表示した後、searchBarの中身をcancelした時に、全ての項目を一覧表示にすることができません。

cancelでsearchBarの中身を空にしても、一覧にはその直前に絞り込んでいた項目が表示されています。

searchBarのtextを削除した時に全ての項目を再度表示させるにはどういったコードが必要でしょうか??

方向性としては”searchFlagをtrue/falseにしてそのタイミングで一覧表示を変える”
という形でお願いできればと思います。

宜しくお願い致します。

ーーーーー以下コードーーーーー

import UIKit
import RealmSwift

class ViewController: UIViewController, UISearchBarDelegate {

@IBOutlet weak var tableView: UITableView!

// Realmインスタンスを取得
let realm = try! Realm()

var taskArray = try! Realm().objects(Task).sorted("date", ascending: false)

var category = try! Realm().objects(Task).filter("name IN {%@, %@, %@, %@, %@}","1", "2", "3", "4", "5")

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@IBOutlet weak var search: UISearchBar!

var searchFlag: Bool = false

func searchBarSearchButtonClicked(searchBar: UISearchBar) {
search.resignFirstResponder()
}

// 検索バーを押した時の処理
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
searchFlag = true
if let search = searchBar.text{
category = try! Realm().objects(Task).filter("category = '\(search)'")
} else {
category = try! Realm().objects(Task).filter("name IN {%@, %@, %@, %@, %@}","1", "2", "3", "4", "5")
}
tableView.reloadData()
}

// 検索をキャンセルした時の処理
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchFlag = false
category = try! Realm().objects(Task).filter("name IN {%@, %@, %@, %@, %@}","1", "2", "3", "4", "5")
tableView.reloadData()
}

// MARK: UITableViewDataSourceプロトコルのメソッド
// データの数(=セルの数)を返すメソッド
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

if searchFlag == true {

return category.count

} else {

return taskArray.count

}
}

// 各セルの内容を返すメソッド
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// 再利用可能な cell を得る
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)

if searchFlag == true {

let task = category[indexPath.row]
cell.textLabel?.text = "\(task.title) \(task.category)"

let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm"

let dateString:String = formatter.stringFromDate(task.date)
cell.detailTextLabel?.text = dateString


} else {

let task = taskArray[indexPath.row]
cell.textLabel?.text = "\(task.title) \(task.category)"

let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm"

let dateString:String = formatter.stringFromDate(task.date)
cell.detailTextLabel?.text = dateString

}

return cell

}


〜〜以下略〜〜
ウォッチ

この質問への回答やコメントをメールでお知らせします。