У меня есть контроллер Tableview с Searchbar и я хочу, чтобы искать в пунктах внутри массива в моем примере я хочу, чтобы искать элементы teamsArr внутри лиг массивапоиска UISearchController для элементов массива внутри другого массива с помощью Swift 2
Теперь мой код поиск штраф в Legue Имя не команды имя
мой код:
import UIKit
struct Legue {
var name:String
var num:Int
var teamsArr:[String]
}
class Table1ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UISearchResultsUpdating {
@IBOutlet var myTable: UITableView!
let cellID="MyCellID"
var Legues:[Legue]=[]
var searchController=UISearchController(searchResultsController: nil)
var filterLegues:[Legue]=[]
func filterContentForSearch(searchText:String,scope:String="All2")
{
filterLegues=Legues.filter{leg in
return leg.name.containsString(searchText) **\\ Here search only in Legue name ,but i want to search in teams name**
}
myTable.reloadData()
}
override func viewDidLoad() {
super.viewDidLoad()
myTable.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellID)
myTable.delegate=self
myTable.dataSource=self
Legues=self.loadData()
searchController.searchResultsUpdater=self
searchController.dimsBackgroundDuringPresentation=false
definesPresentationContext=true
myTable.tableHeaderView=searchController.searchBar
searchController.hidesNavigationBarDuringPresentation=false
}
func loadData()->[Legue]
{
let arrlegue=[Legue(name:"Spain",num: 3,teamsArr: ["Barcelona","Atletico Madrid","Real Madrid"]),Legue(name:"Saudi",num: 4,teamsArr: ["Ahli","Hilal","AlNaser","AlEtihad"]),Legue(name:"England",num: 2,teamsArr:["Lestercity","Man City"]),Legue(name:"Italy",num: 5,teamsArr: ["Juventus","Napoli","AS Roma","Internazionale","AC Milano"])]
return arrlegue
}
override func prefersStatusBarHidden() -> Bool {
return true
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searchController.active && searchController.searchBar.text != ""
{
let x=filterLegues[section].teamsArr.count
return x
}
let x=Legues[section].teamsArr.count
return x
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
if searchController.active && searchController.searchBar.text != ""
{
return filterLegues.count
}
else
{
return Legues.count
}
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
if searchController.active && searchController.searchBar.text != ""
{
return filterLegues[section].name
}
else
{
return Legues[section].name
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell=myTable.dequeueReusableCellWithIdentifier(cellID, forIndexPath: indexPath)
if searchController.active && searchController.searchBar.text != ""
{
cell.textLabel?.text="\(filterLegues[indexPath.section].teamsArr[indexPath.row])"
cell.imageView?.image=UIImage(named: filterLegues[indexPath.section].name)
}
else
{
cell.textLabel?.text="\(Legues[indexPath.section].teamsArr[indexPath.row])"
cell.imageView?.image=UIImage(named: Legues[indexPath.section].name)
}
return cell
}
func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return true
}
func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {
if sourceIndexPath != destinationIndexPath
{
let itemToMove=Legues[sourceIndexPath.section]
Legues.removeAtIndex(sourceIndexPath.section)
Legues.insert(itemToMove, atIndex: destinationIndexPath.section)
myTable.reloadData()
}
}
@IBAction func editButton(sender: UIBarButtonItem) {
myTable.editing=true
}
func updateSearchResultsForSearchController(searchController: UISearchController)
{
filterContentForSearch(searchController.searchBar.text!)
}
}
Ошибка: Невозможно присвоить значение типа «[String]» в type '[Legue]' – Aziz
, но когда я ищу «Man City», вытащите весь раздел и выведите вот так: [MY_Test_App.Legue (имя: «Англия», число: 2, командыArr: [«Lestercity», «Man City», ])], я хочу видеть только «Man City» не все команды в разделе – Aziz
Вам нужно будет отобразить затем фильтр примерно так: 'пусть SEARCHRESULT = arrlegue.map {(legue) -> Legue в пусть newLeague = legue.teamsArr.filter {$ 0.localizedCaseInsensitiveContainsString ("B")} возвращение Legue (имя: legue.name, Num: newLeague. count, teamsArr: newLeague) } .filter {$ 0.num> 0} ' – Cjay