【发布时间】:2018-06-01 10:00:42
【问题描述】:
我还是 swift 新手,我想请教您。提前谢谢你,对不起我的英语不好。
我的目标是:
用户点击表格行中的编辑按钮。 UITextField 出现在单元格中。输入数值后按Return键UITextField再次消失,重新计算单元格。
editButton 按下 -> 隐藏 priceCell & 显示 UITextField & 显示键盘 & 开始编辑/输入值(闪烁光标)-> 停止编辑/输入值按 Return 键执行 -> 隐藏 @987654331 @ & 显示 priceCell & 将输入的值保存到数组中并重新加载已编辑的行
我使用this 答案作为起始蓝图。
我还想使用.decimalPad 键盘来更轻松地输入数值并限制用户只能使用数字(和小数点),但这不包括使用Return 键作为停止编辑,对吗?
我找到了this 可能的解决方案,但我的问题似乎很复杂......
我的视图控制器:
import UIKit
class PortfolioViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, PortfolioCellDelegate {
let getData = GetData()
...
override func viewDidLoad() {
super.viewDidLoad()
cellTableView.delegate = self
cellTableView.dataSource = self
cellTableView.register(UINib(nibName: "PortfolioCell", bundle: nil), forCellReuseIdentifier: "portfolioCell")
self.currencyControl.selectedSegmentIndex = MyVariables.currencyControlSelected
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let coinCell = tableView.dequeueReusableCell(withIdentifier: "portfolioCell", for: indexPath) as! PortfolioCell
...
coinCell.delegate = self
return coinCell
}
...
func portfolioButtonPressed(coinCell: PortfolioCell) {
let indexPath = self.cellTableView.indexPathForRow(at: coinCell.center)!
let selectedCell = cellTableView.cellForRow(at: indexPath) as! PortfolioCell
selectedCell.priceCell.isHidden = true
selectedCell.textCell.isHidden = false
selectedCell.textCell.delegate = self
func textFieldDidEndEditing(textField: UITextField) {
let owned: Double = Double(textField.text!)!
if owned >= 0 {
MyVariables.dataArray[indexPath.row].ownedCell = owned
} else {
MyVariables.dataArray[indexPath.row].ownedCell = 0.00
}
selectedCell.priceCell.isHidden = false
selectedCell.textCell.isHidden = true
self.cellTableView.reloadData()
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
selectedCell.textCell.resignFirstResponder()
return true
}
}
...
}
我的自定义单元格:
import UIKit
protocol PortfolioCellDelegate {
func portfolioButtonPressed(coinCell: PortfolioCell)
}
class PortfolioCell: UITableViewCell {
var delegate: PortfolioCellDelegate?
...
@IBAction func editCellPressed(_ sender: UIButton) {
delegate?.portfolioButtonPressed(coinCell: self)
}
...
}
现在当按钮被正确按下时UITextField 显示,但在按下Return 键后不要关闭。
或者我应该完全改变它并使用点击手势?
【问题讨论】:
-
问题是我没有声明
UITextField委托,我不知道我可以使用override func awakeFromNib() {...}和override func viewDidLoad() {}一样声明委托
标签: ios swift uitableview uibutton uitextfield