问题描述
我正在使用Xibs在UITableViewController内加载单元格,并且由于某种原因,一旦设备方向发生变化,单元格就会重新加载,并且所有输入的UITextField值都会消失。有没有办法防止这种或更好的方法来解决这个价值消失的问题。
我的行单元格如下
override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = configCellView(index: indexPath.row) as? UITableViewCell
cell?.selectionStyle = .none
return cell ?? UITableViewCell()
}
private func configCellView(index: Int) -> UIView? {
switch formType {
//This LOG form works fine even device orientation changes
case .LOG:
if let cell = getXibFile(cellType: LogFormTableViewCell.self,cellIdenifier: Constants.LOGFORM_CELL_IDENTIFIER) {
return cell
}
//This is where the issue is
case .PROSPECT:
switch index {
case 0:
let cell = getXibFile(cellType: LogFormTableViewCell.self,cellIdenifier: Constants.LOGFORM_CELL_IDENTIFIER)
return cell
default:
if let cell = getXibFile(cellType: ContactFormTableViewCell.self,cellIdenifier: Constants.CONTACTFORM_CELL_IDENTIFIER){
return cell
}
}
}
func getXibFile<T: UITableViewCell>(cellType: T.Type,cellIdenifier: String) -> T? {
return Bundle.main.loadNibNamed(cellIdenifier,owner: self,options: nil)?.first as? T
}
解决方法
您当前正在做的是每次重新加载tableView时都创建一个新单元格,不建议这样做。您必须dequeueReusableCell(withIdentifier:)
,以便可以重用单元,这在内存方面更加有效。
关于数据,您可能希望有一个数组来存储每次调用cellForRow
时的数据。