Post

Replies

Boosts

Views

Activity

How do I get the value of a selected row in a table view?
I have a table view and an array of strings. When I swipe a row, I want to add the clicked string to an array of strings. How do I get the value stored in the table view row. I have it set up like this:import UIKit var myStringArray: [String]? var someStringArray: [String] = ["Hot Dogs", "Soda", "Chips", "Hamburgers", "Plates", "Dessert", "Napkins", "Fruit", "Potatoe Salad", "Brats"] func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return someStringArray.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath as IndexPath) cell.textLabel?.text = someStringArray[indexPath.row] cell.textLabel?.adjustsFontSizeToFitWidth = true cell.textLabel?.font = UIFont.systemFont(ofSize: 22) return cell } func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let object: String = someStringArray[indexPath.row] let add = UIContextualAction(style: .normal, title: "Add") { (contextualAction, view, actionPerformed: @escaping (Bool) -> Void) in let alert = UIAlertController(title: "Add ", message: "Are you sure you want to add '\(object)' to your list?", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "No", style: .cancel, handler: { (alertAction) in actionPerformed(false) })) alert.addAction(UIAlertAction(title: "Yes", style: .destructive, handler: { (alertAction) in self.addObject() })) self.present(alert, animated: true) } return UISwipeActionsConfiguration(actions: [add, taken]) } func addObject(index: Int) { let index = table.indexPathForSelectedRow let _index = (index?[someStringArray.hashValue])! if myStringArray!.isEmpty { myStringArray?.insert(someStringArray[_index], at: 0) } else { myStringArray?.append(someStringArray[_index]) } }
9
0
6.3k
Nov ’19
How do I pass data to another view controller in Swift 4?
Xcode, Swift 4How do I pass data to another view controller in Swift 4?Below is my code and I am getting an error message.I am getting an error on line 181. It saysCannot assign value of type 'DataToPass' to type 'ViewController'struct DataToPass { var principal: Double = 0 var balance: Double = 0 var monthlyInterest: Double = 0 var paymentNumber: Int = 0 } class ViewController: UIViewController, UITextFieldDelegate, UITextViewDelegate { var valueToPass: DataToPass = DataToPass(principal: 0.00, balance: 0.00, monthlyInterest: 0.00, paymentNumber: 0) // Class-level constant to hold the months per year. let dblMONTHS_YEAR: Double = 12 // To not allow more than 1 decimal point. func textField(_ textField: UITextField,shouldChangeCharactersIn range: NSRange,replacementString string: String) -> Bool { let countdots = (textField.text?.components(separatedBy: ".").count)! - 1 if countdots > 0 && string == "." { return false } return true } @IBAction func textFieldCost(_ sender: TextField) { func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { self.view.endEditing(true) } } @IBAction func textFieldDownPayment(_ sender: TextField) { func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { self.view.endEditing(true) } } @IBAction func textFieldMonths(_ sender: TextField) { func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { self.view.endEditing(true) } } @IBAction func textFieldAPR(_ sender: TextField) { func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { self.view.endEditing(true) } } @IBOutlet weak var txtViewLabels: UITextView! @IBOutlet weak var txtViewResults: UITextView! // Text Field Outlets. @IBOutlet weak var txtCost: UITextField! @IBOutlet weak var txtDownPayment: UITextField! @IBOutlet weak var txtMonths: UITextField! @IBOutlet weak var txtAPR: UITextField! // Error Message. @IBOutlet weak var lblMessage: UILabel! // Buttons @IBAction func btnCalculate(_ sender: UIButton) { var dblAPR: Double = 0 // To hold the Annual Rate. var dblTotalAmount: Double = 0 // To hold the vehicle total cost. var dblCost: Double = 0 // To hold vehicle cost. var dblDownPayment: Double = 0 // To hold down payment. var intMonths: Int = 0 // To hold number of months for the loan. var dblLoan: Double = 0 // To hold the amount of the loan. var dblMonthlyPayment: Double = 0 // To hold the monthly payment. var dblTotalInterest: Double = 0 // To hold the total interest. var dblMonthlyRate: Double = 0 // To hold the monthly Rate. var monthlyInterest: Double = 0 var balance: Double = 0 var principal: Double = 0 var paymentNumber: Int = 0 var data: [String] = [] func passedValue() { func paymentStructure() { data = [] balance = dblLoan for _ in 1...intMonths { paymentNumber+=1 dblCost = Double(txtCost.text!)! dblDownPayment = Double(txtDownPayment.text!)! intMonths = Int(txtMonths.text!)! dblAPR = Double(txtAPR.text!)! monthlyInterest = balance * ((dblAPR/100)/12) principal = dblMonthlyPayment - monthlyInterest balance = balance - principal let fPrincipal = NSNumber(value: principal) let fResultPrincipal = NumberFormatter.localizedString(from: fPrincipal, number: .currency) let fBalance = NSNumber(value: balance) let fResultBalance = NumberFormatter.localizedString(from: fBalance, number: .currency) let fMonthlyInterest = NSNumber(value: monthlyInterest) let fResultMonthlyInterest = NumberFormatter.localizedString(from: fMonthlyInterest, number: .currency) data += ["\(paymentNumber). P: \(fResultPrincipal), I: \(fResultMonthlyInterest), B: \(fResultBalance)"] } valueToPass.paymentNumber = intMonths valueToPass.monthlyInterest = monthlyInterest valueToPass.principal = principal valueToPass.balance = balance } } else if txtCost.text != nil && txtDownPayment.text != nil && txtMonths.text != nil && txtAPR.text != nil { // Clear the message. lblMessage.text = "" dblCost = Double(txtCost.text!)! dblDownPayment = Double(txtDownPayment.text!)! intMonths = Int(txtMonths.text!)! dblAPR = Double(txtAPR.text!)! // Get the APR rate. dblAPR = dblAPR / 100 // Get the monthly rate. dblMonthlyRate = dblAPR / dblMONTHS_YEAR // Get the monthly payment. dblMonthlyPayment = (dblCost - dblDownPayment) * (dblMonthlyRate / (1 - pow(1 + dblMonthlyRate, Double(-intMonths)))) // Get the amount of the loan. dblLoan = dblCost - dblDownPayment // Get the total interest. dblTotalInterest = dblMonthlyPayment * Double(intMonths) - dblLoan // Get the Total Amount. dblTotalAmount = dblCost + dblTotalInterest // Get the Vehicle Cost. dblCost = dblTotalAmount - dblTotalInterest // Format the results. let fCost = NSNumber(value: dblCost) let fResultCost = NumberFormatter.localizedString(from: fCost, number: .currency) let fDownPayment = NSNumber(value: dblDownPayment) let fResultDownPayment = NumberFormatter.localizedString(from: fDownPayment, number: .currency) let fLoan = NSNumber(value: dblLoan) let fResultLoan = NumberFormatter.localizedString(from: fLoan, number: .currency) let fMonthlyPayment = NSNumber(value: dblMonthlyPayment) let fResultMonthkyPayment = NumberFormatter.localizedString(from: fMonthlyPayment, number: .currency) let fAPR = NSNumber(value: dblAPR) let fResultAPR = NumberFormatter.localizedString(from: fAPR, number: .percent) let fTotalInterest = NSNumber(value: dblTotalInterest) let fResultTotalInterest = NumberFormatter.localizedString(from: fTotalInterest, number: .currency) let fTotalAmount = NSNumber(value: dblTotalAmount) let fResultTotalAmount = NumberFormatter.localizedString(from: fTotalAmount, number: .currency) txtViewLabels.text = " APR:\n Months: \n Cost:\n Down Payment:\n Loan Amount:\n Monthly Payment:\n Total Interest:\n Total Amo txtViewResults.text = " \(fResultAPR)\n \(intMonths)\n \(fResultCost)\n \(fResultDownPayment)\n \(fResultLoan)\n \(fResultMonthkyPayment)\n \(fResultTotalInterest)\n \(fResultTotalAmount)" passedValue() } } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "payout structure" { if let destVC = segue.destination as? PayoutStructure { destVC.passedData = valueToPass } } } }
8
0
2.9k
Jan ’19