>

검색을하고 셀 중 하나를 눌러 AlertView를 표시하려고합니다. 그리고이 alertView는 배열에 추가하도록 요청합니다. 나는 didSelectRowAt indexPath 를 사용하고 있습니다  기능 및 검색 기능. 검색하기 전에 모든 것이 잘 작동합니다. 그러나 검색이 활성화되어 있으면 검색 표시 줄은 제대로 작동하지만 탭된 셀에는 alertView가 표시되지 않습니다. didSelectRowAt indexPath 에 문제가 있다고 생각합니다.  기능.

내 검색 기능은 다음과 같습니다.

   func updateSearchResults(for searchController: UISearchController) {
    if searchController.searchBar.text != "" {
        filteredData.removeAll(keepingCapacity: false)
        let textToSearch = searchController.searchBar.text!
        filteredData = mainArray.filter({($0.names?.lowercased().contains(textToSearch.lowercased()))!})
        listTableView.reloadData()
    }
    else {
        filteredData.removeAll(keepingCapacity: false)
        listTableView.reloadData()
    }
}

이것은 didSelectRow 함수입니다 :

   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let alertController = UIAlertController(title: "Alert", message: "Add To array?", preferredStyle: .alert)
    let yesAction = UIAlertAction(title: "Yes", style: .default) { (action) -> Void in
        if self.resultSearchController.searchBar.text != "" {
            self.secondArray.append(self.filteredData[indexPath.row])
        }
        else {
            self.secondArray.append(self.mainArray[indexPath.row])
        }
        print(self.secondArray)
    }
    let noAction = UIAlertAction(title: "No", style: .default) { (action) -> Void in
        print("Do not append")
    }
    alertController.addAction(yesAction)
    alertController.addAction(noAction)
    if self.presentedViewController == nil {
        self.present(alertController, animated: true, completion: nil)
    }
}

그리고 여기는 cellForRowAt 입니다  기능. 복잡해 보인다는 것을 알고 있습니다.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cellIdentifier: String = "BasicCell"
    let myCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MyTableCell
    //Label1
    if resultSearchController.searchBar.text != "" {
        let item: LocationModel = filteredData[indexPath.row]
        let desenNoToString = item.DesenNo
        let desenString = "\(desenNoToString)"
        let regex = try! NSRegularExpression(pattern:"\"(.*)\"")
        if let match = regex.firstMatch(
            in: desenString, range:NSMakeRange(0,desenString.utf16.count)) {
            let result = (desenString as NSString).substring(with: match.range(at:1))
            myCell.label1!.text = result
        }
        //Label2
        let dolarToString = item.Dolar
        let dolarString = "\(dolarToString)"
        if let match = regex.firstMatch(
            in: dolarString, range:NSMakeRange(0,dolarString.utf16.count)) {
            let result = (dolarString as NSString).substring(with: match.range(at:1))
            myCell.label2!.text = result
        }
        //Label3
        let zeminToString = item.Zemin
        let zeminString = "\(zeminToString)"
        if let match = regex.firstMatch(
            in: zeminString, range:NSMakeRange(0,zeminString.utf16.count)) {
            let result = (zeminString as NSString).substring(with: match.range(at:1))
            myCell.label3!.text = result
        }
        //Label4
        let renkToString = item.Renk
        let renkString = "\(renkToString)"
        if let match = regex.firstMatch(
            in: renkString, range:NSMakeRange(0,renkString.utf16.count)) {
            let result = (renkString as NSString).substring(with: match.range(at:1))
            myCell.label4!.text = result
        }
        //Label5
        let enToString = item.En
        let enString = "\(enToString)"
        if let match = regex.firstMatch(
            in: enString, range:NSMakeRange(0,enString.utf16.count)) {
            let result = (enString as NSString).substring(with: match.range(at:1))
            myCell.label5!.text = result
        }
        //Label6
        let euroToString = item.Euro
        let euroString = "\(euroToString)"
        if let match = regex.firstMatch(
            in: euroString, range:NSMakeRange(0,euroString.utf16.count)) {
            let result = (euroString as NSString).substring(with: match.range(at:1))
            myCell.label6!.text = result
        }
    }else {
        let item: LocationModel = feedItems[indexPath.row]
        let desenNoToString = item.DesenNo
        let desenString = "\(desenNoToString)"
        let regex = try! NSRegularExpression(pattern:"\"(.*)\"")
        if let match = regex.firstMatch(
            in: desenString, range:NSMakeRange(0,desenString.utf16.count)) {
            let result = (desenString as NSString).substring(with: match.range(at:1))
            myCell.label1!.text = result
        }
        //Label2
        let dolarToString = item.Dolar
        let dolarString = "\(dolarToString)"
        if let match = regex.firstMatch(
            in: dolarString, range:NSMakeRange(0,dolarString.utf16.count)) {
            let result = (dolarString as NSString).substring(with: match.range(at:1))
            myCell.label2!.text = result
        }
        //Label3
        let zeminToString = item.Zemin
        let zeminString = "\(zeminToString)"
        if let match = regex.firstMatch(
            in: zeminString, range:NSMakeRange(0,zeminString.utf16.count)) {
            let result = (zeminString as NSString).substring(with: match.range(at:1))
            myCell.label3!.text = result
        }
        //Label4
        let renkToString = item.Renk
        let renkString = "\(renkToString)"
        if let match = regex.firstMatch(
            in: renkString, range:NSMakeRange(0,renkString.utf16.count)) {
            let result = (renkString as NSString).substring(with: match.range(at:1))
            myCell.label4!.text = result
        }
        //Label5
        let enToString = item.En
        let enString = "\(enToString)"
        if let match = regex.firstMatch(
            in: enString, range:NSMakeRange(0,enString.utf16.count)) {
            let result = (enString as NSString).substring(with: match.range(at:1))
            myCell.label5!.text = result
        }
        //Label6
        let euroToString = item.Euro
        let euroString = "\(euroToString)"
        if let match = regex.firstMatch(
            in: euroString, range:NSMakeRange(0,euroString.utf16.count)) {
            let result = (euroString as NSString).substring(with: match.range(at:1))
            myCell.label6!.text = result
        }
    }
    return myCell
}

도움이 될 수 있기를 바랍니다.

편집 : 여전히 문제가 있습니다. 어떤 제안?


  • 답변 # 1

    DidSelectRowAtIndexPath에서

    잘못된 :

    if self.presentedViewController == nil {
       self.present(alertController, animated: true, completion: nil) 
    }
    
    

    다음으로 대체 :

    self.present(alertController, animated: true, completion: nil)
    
    

    설명 : 일반적인 시나리오의 경우, 당시 테이블 뷰 셀을 두드리면 컨트롤러가 표시되지 않았습니다. 따라서 "self.presentedViewController == nil"은 항상 true입니다.

    그러나 모든 값을 검색하는 동안 UISearchbar 컨트롤러가 항상 표시됩니다. 따라서 조건은 항상 거짓입니다.

    제공된 컨트롤러에서도 경고보기를 제공 할 수 있습니다. 따라서 그러한 상태를 확인할 필요는 없습니다.

관련 자료

  • 이전 기본 요소 반응 선택한 ListItem 스타일 처리
  • 다음 javascript - React 애플리케이션에서 windowlocalStorage를 사용할 수 있습니까?