2017-05-09 2 views
0

약간의 문제가 있습니다. 검색 창을 통해 배열을 검색 할 수 있습니다. 그러나 내 배열에없는 도시를 검색 할 때 아무 것도 변경하지 않습니다. 이 경우 오류 메시지를 표시하고 싶습니다.신속하게 검색 창을 사용할 때 아무 것도 발견되지 않았습니다. 3

var cities = [String]() 
var citiesFiltered = [String]() 
var searchBarActive:Bool = false 

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

    cities = ["Abu Dabi","Amman","Berlin","Catarman","Dortmund"] 
} 

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    if(searchBarActive){ 
     return citiesFiltered.count 
    } 
    return cities.count 
} 

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) 

    if(searchBarActive){ 
     cell.textLabel?.text = citiesFiltered[indexPath.row] 
    }else{ 
     cell.textLabel?.text = cities[indexPath.row] 
    } 

    return cell 
} 

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) { 
    searchBarActive = true 
} 

func searchBarTextDidEndEditing(_ searchBar: UISearchBar) { 
    searchBarActive = false 
} 

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { 
    searchBarActive = false 
} 

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 
    searchBarActive = false 
} 

func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar) { 
    searchBarActive = false 
} 

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

    citiesFiltered = cities.filter({ (text) -> Bool in 
     let txt : NSString = text as NSString 
     let range = txt.range(of: searchText, options: NSString.CompareOptions.caseInsensitive) 

     return range.location != NSNotFound 
    }) 

    if(citiesFiltered.count == 0){ 
     searchBarActive = false 
    }else{ 
     searchBarActive = true 
    } 

    self.tableView.reloadData() 
} 

답변

1

//이 변경 사항을 사용해보십시오.

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    if(searchBarActive && citiesFiltered.count == 0){ 
     return 1 
    } 
    else if searchBarActive { 
     return citiesFiltered.count 
    } 
    return cities.count 
} 

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) 

    if(searchBarActive && citiesFiltered.count == 0){ 
     cell.textLabel?.text = "Not found any city" 
    } 
    else if searchBarActive { 
     cell.textLabel?.text = citiesFiltered[indexPath.row] 
    } 
    else{ 
     cell.textLabel?.text = cities[indexPath.row] 
    } 

    return cell 
} 


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

    citiesFiltered = cities.filter({ (text) -> Bool in 
     let txt : NSString = text as NSString 
     let range = txt.range(of: searchText, options: NSString.CompareOptions.caseInsensitive) 

     return range.location != NSNotFound 
    }) 


    self.tableView.reloadData() 
} 
+0

else if searchBarActive { 도시 답방 계산 된 금액 } 편집하는 경우 답변을 수락합니다 @ user3608500 – Mayday

+0

그 점을 지적 해 주셔서 감사합니다 ... 어떻게 든 놓친 것 같습니다. – user3608500

0

문제는 여기

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

    citiesFiltered = cities.filter({ (text) -> Bool in 
     let txt : NSString = text as NSString 
     let range = txt.range(of: searchText, options: NSString.CompareOptions.caseInsensitive) 

     return range.location != NSNotFound 
    }) 

    if(citiesFiltered.count == 0){ 
     searchBarActive = false 
    }else{ 
     searchBarActive = true 
    } 

    self.tableView.reloadData() 
} 

당신은 따라서 필터링되지 않은 목록이 표시 비활성 막대를 설정하는 것입니다 때 예를 들어

내 코드는 다음과 같습니다 '어떤 도시를 찾을 수 없습니다' 필터링 된 배열은 비어 있습니다. 목록에없는 무언가를 검색 할 때

if(citiesFiltered.count == 0){ 
     searchBarActive = false 
    }else{ 
     searchBarActive = true 
    } 

을 제거함으로써 당신은 빈 테이블을 얻을 수 있습니다.

+0

당신 말이 맞습니다. 그렇다면, 어떤 메시지를 표시하지 않을 때 어떻게 특별한 메시지를 보여줄 수 있습니까? – Mayday

+0

@ user3608500 답이 트릭을해야합니다 – carlito