Я делаю конвертер валют, который обновляет валюты одновременно с вводом.Валюты хранятся в табличном представлении, и ячейка является настраиваемой ячейкой.
Я хочу иметь возможность вводить в одну ячейку и видеть, как все остальные ячейки обновляются в соответствии со значением из расчета преобразования.Расчет работает, но я не уверен, как вернуть данные в правильные ячейки, так как по сути есть только одна, поскольку это многократно используемая ячейка.
Вот класс ячейки (я просто показываюввод, чтобы все было ясно.):
class PageCell: UITableViewCell {
let cellCalcInput = UITextField()
func configureCustomCell() {
contentView.addSubview(cellCalcInput)
cellCalcInput.translatesAutoresizingMaskIntoConstraints = false
cellCalcInput.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -10).isActive = true
cellCalcInput.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true
cellCalcInput.font = secondFont?.withSize(18)
cellCalcInput.textColor = .white
cellCalcInput.placeholder = "Enter an amount"
cellCalcInput.keyboardType = .decimalPad
cellCalcInput.borderStyle = .roundedRect
cellCalcInput.backgroundColor = .clear
cellCalcInput.isHidden = true
self.backgroundColor = .darkGray
contentView.contentMode = .scaleAspectFit
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String!) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Далее я создаю ячейки, я показываю больше, чтобы вы поняли, как я устанавливаю данные для каждой ячейки для выбранной валюты.
Затем я добавляю слушатель textFieldDidChange:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var coinName = String()
tableView.separatorStyle = .none
let cell:PageCell = tableView.dequeueReusableCell(withIdentifier: "PageCell") as! PageCell
cell.configureCustomCell()
let index = indexPath.row
let coins = Manager.shared.coins
let coin = coins[index]
var coinIndex = Int()
coinIndex = CGPrices.shared.coinData.index(where: { $0.id == coin })!
let unit = CGExchange.shared.exchangeData[0].rates[defaultCurrency]!.unit
coinIndexes.append(coinIndex)
//Prices from btc Exchange rate.
let btcPrice = CGPrices.shared.coinData[coinIndex].current_price!
let dcExchangeRate = CGExchange.shared.exchangeData[0].rates[defaultCurrency]!.value
let realPrice = (btcPrice*dcExchangeRate)
setBackground(dataIndex: coinIndex, contentView: cell.contentView)
coinName = CGPrices.shared.coinData[coinIndex].name
let imageString = CGPrices.shared.coinData[coinIndex].image
cell.theImageView.sd_setImage(with: URL(string: imageString), placeholderImage: UIImage(named: "CryptiXJustX"))
cell.cellTextLabel.text = coinName
cell.cellDetailLabel.text = "\(unit)\((round(1000*realPrice)/1000))"
cell.cellCalcInput.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
// здесь слушатель текста
return cell
}
@objc func textFieldDidChange(_ textField: UITextField) {
var index = Int()
index = textField.tag
if textField.text != "" {
calculations(dataIndex: index, calcInput: textField)
} else {
print("no text")
}
}
и здесь я делаю вычисления, когда они набираются,и получить результаты, это не завершено, но мне нужно теперь каким-то образом отобразить эти результаты внутри поля UIText для каждой ячейки, относящиеся к правильной валюте.
var coinIndexes = [Int]()
var answers = [Double]()
//
var comparitorIndex = 0
func calculations(dataIndex: Int, calcInput: UITextField) {
let exchangeRate = CGExchange.shared.exchangeData[0].rates[defaultCurrency]!.value
//
let btcPrice = CGPrices.shared.coinData[dataIndex].current_price!
//
if answers.count < coinIndexes.count {
var calculation = ""
if CGPrices.shared.coinData[dataIndex].id == "bitcoin" {
calculation = String(Double(calcInput.text!)! / btcPrice)
} else {
calculation = String(Double(calcInput.text!)! * btcPrice)
}
let calcAsDouble = Double(calculation)
let calcFinal = Double(round(1000*calcAsDouble!)/1000)
var comparitor = coinIndexes[comparitorIndex]
var comparitorPrice = CGPrices.shared.coinData[comparitor].current_price!
var comparitorAnswer = (calcFinal/comparitorPrice)
answers.append(comparitorAnswer)
comparitorIndex += 1
print(comparitorAnswer)
calculations(dataIndex: dataIndex, calcInput: calcInput)
}
comparitorIndex = 0
}
Здесь в основном я делаю вычисления, на основе которыхячейка набирается, и я могу узнать, какая валюта это из тега, а затем, используя индекс валюты, я могу проверить мой API и получить его имя и значения, а затем я делаю расчет, чтобы comсравнить другие валюты со значением, которое ввел пользователь.Расчеты работают и дают правильные результаты, я просто не знаю, как отправить результаты обратно в правильные ячейки.Спасибо.
Извините, если это очень неряшливая работа, я все еще плохо знаком с кодированием.