ULTextField values disappears when the device orientation changes

34 views Asked by At

Im using Xibs to load cells inside a UITableViewController, and for some reason once the device orientation changes the cell is getting reloads and all the entered UITextField values get disappear. Is there a way to prevent this or better way to solve this problem of values getting disappeared.

my cell for row as follow

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = configCellView(index: indexPath.row) as? UITableViewCell

    cell?.selectionStyle = .none
    return cell ?? UITableViewCell()
}

My configCellView method as follow

   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
 }
1

There are 1 answers

2
Duy Nguyen On

What you are currently doing is creating a new cell every time the tableView reload which is not recommended. You have to dequeueReusableCell(withIdentifier:) so that cell can be reused, which is more efficient in terms of memory.

Regarding data, you might want to have an array to store and retrieve data every time cellForRow get called.