簡體   English   中英

如何在swift中從選定的tableviewcell中過濾數組?

[英]How to filter array from selected tableviewcell in swift?

我很困惑我將如何構建關於如何從tableviewcell過濾所選數組的代碼。 下面的JSON是tableview的內容,顯示如下 這個

[
    {
    "hospitalNumber": "00000001",
    "patientName": "Test Patient",
    "totalAmount": 1111.3
    },
    {
    "hospitalNumber": "00000002",
    "patientName": "Test Patient 2",
    "totalAmount": 1312
    },
    {
    "hospitalNumber": "00000003",
    "patientName": "Test Patient 3",
    "totalAmount": 475
    }
]

問題是如何在下一個View Controller顯示所選的hospitalNumberpatientName ,它將顯示為 這個

這就是我的`PaymentDetailsViewController':

 var patientList: [Patient]! {
    didSet {
        latestCreditedAmountTableView.reloadData()
    }
}

  override func viewDidLoad() {
    super.viewDidLoad()

  getPatientList()

 }
  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
      if segue.identifier == "showPatientPaymentDetailsVC" {
        if let patientPaymentDetailsVC = segue.destination as? PatientPaymentDetailsViewController {
            patientPaymentDetailsVC.isBrowseAll = self.isBrowseAll

            if !isBrowseAll {
                patientPaymentDetailsVC.patientPayoutDetails = self.selectedPatientPayment
                patientPaymentDetailsVC.currentRemittance = self.currentRemittance
                patientPaymentDetailsVC.doctorNumber = self.doctorNumber

            }
        }
    }
}


func getPatientList() {
    SVProgressHUD.setDefaultMaskType(.black)
    SVProgressHUD.show(withStatus: "Retrieving Patient List")

    APIService.PatientList.getPatientList(doctorNumber: doctorNumber, periodId: currentRemittance.periodId) { (patientListArray, error) in
        guard let patientListPerPayout = patientListArray, error == nil else {
            if let networkError = error {
                switch networkError {
                case .noRecordFound:
                    let alertController = UIAlertController(title: "No Record Found", message: "You don't have current payment remittance", preferredStyle: .alert)
                    alertController.addAction(UIAlertAction(title: "OK", style: .default))
                    self.present(alertController, animated: true, completion: nil)
                case .noNetwork:
                    let alertController = UIAlertController(title: "No Network", message: "\(networkError.rawValue)", preferredStyle: .alert)
                    alertController.addAction(UIAlertAction(title: "OK", style: .default))
                    self.present(alertController, animated: true, completion: nil)
                default:
                    let alertController = UIAlertController(title: "Error", message: "There is something went wrong. Please try again", preferredStyle: .alert)
                    alertController.addAction(UIAlertAction(title: "OK", style: .default))
                    self.present(alertController, animated: true, completion: nil)
                }
            }
            SVProgressHUD.dismiss()
            return
        }

        self.patientList = patientListPerPayout
        self.latestCreditedAmountTableView.reloadData()
        SVProgressHUD.dismiss()
        return

    }
}

**getPerPatientPAyoutDetails(from: String) function**

func getPerPatientPayoutDetails(from: String) {
    SVProgressHUD.setDefaultMaskType(.black)
    SVProgressHUD.showInfo(withStatus: "Retrieving Patient Details")

    APIService.PatientList.getPatientDetailsPerPayout(periodId: currentRemittance.periodId, doctorNumber: doctorNumber, parameterName: .selectedByHospitalNumber, hospitalNumber: from) { (patientPayout, error) in

        guard let patientPerPayoutDetails = patientPayout, error == nil else {
            if let networkError = error {
                switch networkError {
                case .noRecordFound:
                    let alertController = UIAlertController(title: "No Record Found", message: "You don't have current payment remittance", preferredStyle: .alert)
                    alertController.addAction(UIAlertAction(title: "OK", style: .default))
                case .noNetwork:
                    let alertController = UIAlertController(title: "No Network", message: "\(networkError.rawValue)", preferredStyle: .alert)
                    alertController.addAction(UIAlertAction(title: "OK", style: .default))
                    self.present(alertController, animated: true, completion: nil)
                default:
                    let alertController = UIAlertController(title: "Error", message: "There is something went wrong. Please try again", preferredStyle: .alert)
                    alertController.addAction(UIAlertAction(title: "OK", style: .default))
                    self.present(alertController, animated: true, completion: nil)
                }
            }
            SVProgressHUD.dismiss()
            return
        }
        self.selectedPatientPayment = patientPerPayoutDetails
        print(self.selectedPatientPayment)

        SVProgressHUD.dismiss()
        return
    }
}

基於gePatientList()函數,它將只提取患者的完整列表。 我不知道如何將所選患者的數據傳遞給另一個VC。 希望您能夠幫助我。 非常感謝。

可能有助於理解我的代碼流的代碼

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    switch indexPath.section {
    case 0: break
    case 1: let selectedpatient = patientList[indexPath.row].hospitalNumber
    print(selectedpatient!)
    self.isBrowseAll = false
    getPerPatientPayoutDetails(from: selectedpatient!)
    default: break
    }
}

下面是另一個將顯示patientNamehospitalNumber View Controller

PatientPaymentDetailsVC

class PatientPaymentDetailsViewController: UIViewController {

@IBOutlet weak var patientProcedureTableView: UITableView!
@IBOutlet weak var hospitalNumberLabel: UILabel!
@IBOutlet weak var patientNameLabel: UILabel!

var currentRemittance: CurrentRemittance!
var doctorNumber: String!
var isBrowseAll: Bool!
var patientList: [Patient]!

var patientPayoutDetails: [PatientPayoutDetails]!

 override func viewDidLoad() {
    super.viewDidLoad()

    setupPatientInfo()

 }

 //MARK: FUNCTION

 func setupPatientInfo() {
    self.patientNameLabel.text = patient.patientName
    self.hospitalNumberLabel.text = patient.hospitalNumber
}

來自didselectgetPerPatientPayoutDetails函數下的拉取數據將顯示在PatientPaymentDetailsVC 下面是輸出,你可以看到我可以在getPerPatientPayoutDetails下提取數據,但patientNamehospitalNumber不顯示數據。 在此輸入圖像描述

首先,不要從表視圖單元格中獲取數據,從數據源獲取數據

  • 將segue連接到單元格
  • 刪除整個方法didSelectRowAt
  • prepare(for segue稱為sender參數是cell
  • 從細胞中獲取索引路徑並使患者進入該索引路徑。
  • 而不是傳遞多個參數聲明var patient : Patient! 目標控制器中的屬性並移交patient實例。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard segue.identifier == "showPatientPaymentDetailsVC",
      let cell = sender as? UITableViewCell,
      let indexPath = tableView.indexPath(for: cell) else { return }

    let patient = patientList[indexPath.row]
    getPerPatientPayoutDetails(from: patient.hospitalNumber)

    let patientPaymentDetailsVC = segue.destination as! PatientPaymentDetailsViewController
    patientPaymentDetailsVC.patient = patient
    patientPaymentDetailsVC.patientPayoutDetails = self.selectedPatientPayment
    patientPaymentDetailsVC.currentRemittance = self.currentRemittance
    patientPaymentDetailsVC.doctorNumber = self.doctorNumber
}

class PatientPaymentDetailsViewController: UIViewController {

@IBOutlet weak var patientProcedureTableView: UITableView!
@IBOutlet weak var hospitalNumberLabel: UILabel!
@IBOutlet weak var patientNameLabel: UILabel!

var currentRemittance: CurrentRemittance!
var doctorNumber = ""
var isBrowseAll = false
var patient : Patient!

var patientPayoutDetails: [PatientPayoutDetails]!

 override func viewDidLoad() {
    super.viewDidLoad()

    setupPatientInfo()

 }

 //MARK: FUNCTION

 func setupPatientInfo() {
    self.patientNameLabel.text = patient.patientName
    self.hospitalNumberLabel.text = patient.hospitalNumber
}

邊注:

不要將patientList聲明為隱式展開的可選項,將其聲明為非可選的空數組

var patientList : [Patient]()

通過符合UITableViewDelegate使用tableView(_:didSelectRowAt:)方法。 獲取所選患者,如下所示:

selectedPatient = tableView[indexpath.row] as! [String:Any]

根據您編輯的問題,試試這個:

let patient = patientList[indexPath.row] as! Patient

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM