2016-04-15 8 views
0

私は、ユーザが複数の選択肢を持つことを可能にする約200項目のテーブルビューを持っています。その後、ユーザはそれらの選択肢をサブミットします。Swiftでテーブルビューと検索バーの選択を同期させる方法は?

選択プロセスを簡単にする検索ビューバーをそのテーブルビューのヘッダーに配置したいと考えています。

複数の選択肢を持つように検索結果表を持つことはできますが、ユーザーが他の表を選択して削除すると、選択項目は表表と同期しません。

検索機能を使用して複数の選択表を表示する方法を教えてください。

例 -

私は次のようなデータを持つテーブルのビューを持っている -

__ Hello 
__ Hello World 
__ hi There 
__ What's Up 
__ iOS 9 dev 
__ Swift 
__ Hey there 

ユーザーが検索バーに「SW」に入り、スウィフトと削除を選択したとき、私は、このような何かを持っていたいです別の検索を実行する検索クエリ。

__ Hello 
__ Hello World 
__ hi There 
__ What's Up 
__ iOS 9 dev 
√ Swift 
__ Hey there 

と今、彼/彼女は「WH」書き込み、テーブルビューの選択は

__ Hello 
__ Hello World 
__ hi There 
√ What's Up 
__ iOS 9 dev 
√ Swift 
__ Hey there 

をする必要があり、ユーザーが送信ボタンをタップしたときに選択配列が返されるべき、最大何を選択した場合[3,5]

誰でもこれを助けることができますか?

私は、迅速かつiOSの開発にかなり新しいですし、助けていただければ幸いです。

+0

申し訳ありませんが、私は混乱しています。ユーザーが検索キーワードを入力し、一致するものを見つけて、別の検索用語を入力してより多くの一致を取得し、別の検索用語を入力して、別の検索条件を入力してほしいと言っていますか? –

+0

@MauryMarkowitzはい..まさに..私はユーザーが1つまたは多くのオプションを選択する必要があるので、200周りのリストを持っている..したがって、ユーザーは複数回を検索する必要があります.. –

+0

このような.. https: //www.cocoacontrols.com/controls/jgcustomselectionしかし、残念ながら..このコントロールは動作しません..デベロッパーはそれを放棄しているようです。 –

答えて

2
import UIKit 

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate { 

@IBOutlet var tableView: UITableView! 

@IBOutlet var searchBar : UISearchBar! 


// third field in array is your index, everything more easy with it 

var array = [["Swift", false, 0], ["teste", false, 1], ["linguagem", false, 2], ["objectivec", false, 3]] 
var arrayFilter = [] 


@IBOutlet weak var okbutton: UIButton! 


@IBAction func okButton(sender: AnyObject) { 
    var selection : [Int] = [] 
    for element in self.array { 
     if element[1] as! Bool { 
      selection.append(element[2] as! Int) 
     } 
    } 
    print(selection) 
} 



func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { 

// filter array with string that start with searchText 

    self.arrayFilter = array.filter{ 
     if let pos = ($0[0] as! String).lowercaseString.rangeOfString(searchText.lowercaseString) { 
      return (pos.startIndex == ($0[0] as! String).startIndex) 
     } 
     return false 
    } 
    tableView.reloadData() 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    searchBar.delegate = self 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

// MARK: - Table view data source 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 
    return self.searchBar.text == "" ? self.array.count : self.arrayFilter.count 

} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 
    let lista = self.searchBar.text == "" ? self.array : self.arrayFilter 
    cell.textLabel?.text = lista[indexPath.row][0] as? String 

// check cell based on second field 

    cell.accessoryType = lista[indexPath.row][1] as! Bool ? .Checkmark : .None 
    return cell 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let lista = self.searchBar.text == "" ? self.array : self.arrayFilter 
    let id = lista[indexPath.row][2] as! Int 

// invert the value of checked 
    self.array[id][1] = !(array[id][1] as! Bool) 
    self.searchBar.text = "" 
    tableView.reloadData() 
} 

} 
+0

検索クエリを持つすべてのデータを取得します。彼/彼女が必要とするものをチェックしてください。別のものを検索するために戻る。 –

+0

私はUISearchBarを使って必要な調整を行い、gitを更新しました。 –

+0

恐ろしい男.. !!!!!ここに来る他の誰かのために... GITへのリンクです.. https://github.com/ccastroelo/SOF36653922 –

関連する問題