UITableView 过滤

Abh*_*eet 1 iphone uitableview ios swift

我必须使用搜索栏在 tableview 中执行搜索操作。
其中有一个人名的标签和这些人在其单元格中的图像。

我的代码是

override func viewDidLoad() {
        super.viewDidLoad()

    ArrPersons = ["Mahatma Gandhi","Pramukh Swami","Akshay Kumar","Sachin Tendulkar","Chetan Bhagat","Sardar Vallabhai Patel","Amitabh Bachchan"]
     arrPersonImages = ["1.png","2.png","3.png","4.png","5.png","6.png","7.png"]
}

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
    if (searchText.characters.count>0) {
        let predicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchText)
        ArrPersons = arrTemp
let array = (self.ArrPersons as NSArray).filteredArrayUsingPredicate(predicate)
    print(array)
        ArrPersons = array as! [String]

    }
    else
    {
        ArrPersons = arrTemp
    }
    self.tableviewww.reloadData()

}


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

            return self.ArrPersons.count
        }

   func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
    let cell = tableviewww.dequeueReusableCellWithIdentifier("mycell")as! buildVcCell
   cell.personsImages.image = UIImage (named:arrPersonImages[indexPath.row] )
    cell.labelPersonNamess?.text = self.ArrPersons[indexPath.row]
    cell.addBtn.addTarget(self, action: #selector(BuildVc.AddbuttonClicked(_:)), forControlEvents: .TouchUpInside)
    return cell

}
Run Code Online (Sandbox Code Playgroud)

问题是此代码仅对标签人员数组执行搜索。arrPersonImages没有根据在搜索栏中输入的人的姓名进行过滤。

Ahm*_*d F 5

您应该为 Person 创建一个“模型”(使用MVC模式):

首先,创建“人”模型:

struct Person {
    var name: String?
    var imageName: String?
}
Run Code Online (Sandbox Code Playgroud)

您可以创建一个 Person 模型数组,而不是使用两个单独的数组来存储人员的数据:

// add those vars to your ViewController:
var persons = [Person]()
var filteredPersons = [Person]()
var isFiltering = false

override func viewDidLoad() {
    super.viewDidLoad()

    persons = [Person(name: "Ahmad", imageName: "img.png"), Person(name: "Harry", imageName: "img.png")]
}

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        if (searchText.characters.count>0) {
            isFiltering = true
            filteredPersons = persons.filter {
                $0.name?.range(of: searchText, options: .caseInsensitive, range: nil, locale: nil) != nil
            }
            print(filteredPersons)
        }
        else
        {
            isFiltering = false
            filteredPersons = persons
        }
        self.tableviewww.reloadData()
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return isFiltering == true ? filteredPersons.count : persons.count
}

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

     // getting the current person
     let currentPerson = isFiltering == true ? filteredPersons[indexPath.row] : persons[indexPath.row]

     // do the rest of the implementation...
     //...
}
Run Code Online (Sandbox Code Playgroud)

请注意,这是 Swift 3 代码。