tableView перезагружается, но не обновляет / не изменяет интерфейс - PullRequest
0 голосов
/ 11 мая 2018

У меня есть tableView с пользовательской ячейкой. В этой пользовательской ячейке у меня есть два uiview, сложенных горизонтально. 1-е представление отображает сведения о продукте, 2-е представление отображает его доступность. Я изначально скрываю 2-й вид и отображаю его только тогда, когда продукт OUT OF STOCK .

Данные в первом представлении загружаются динамически после входа в систему. В ответ на первый API, я вызываю API 2-го представления для каждого indexpath в tableView, чтобы скрыть / показать 2-е представление. У меня есть меню боковой панели, из которого я выбираю такие категории товаров, как «Одежда», «Электроника», «Все» и т. Д. По умолчанию «Все» загружается после входа в систему. Поэтому, когда я выбираю «Одежда», вызывается api для загрузки сведений об одежде в первом представлении и его доступности (если не в наличии) во втором.

Проблема заключается в том, что когда я выбираю тип продукта и перезагружаю tableView, тогда информация о продукте отображается правильно, но информация OUT OF STOCK отображается неправильно. 2-й вид должен быть виден только и только тогда, когда продукт недоступен. Даже после обновления tableView он отображает неверные данные в пользовательском интерфейсе. Я получаю правильные значения в ответе JSON, но они не отражаются в tableView. Я использую тот же tableView, но перезагружаю данные, когда пользователь выбирает какой-либо продукт. 2-й вид следует расширять только и только тогда, когда товар НЕ В НАЛИЧИИ, в противном случае пользователь видит только 1-й вид, т. Е. Сведения о продукте. Я запутался с пользовательским интерфейсом, пожалуйста, помогите мне с этим, я борюсь с неделю.

public static var productListArray = [Products]()
public static var productAvailableArray = [AvailableProduct]()
public static var availableIdArray = [Int]()

override func viewDidLoad() {
    super.viewDidLoad()       

    //Pull Down to refresh 
    refreshControl.addTarget(self, action: #selector(refreshAction), for: .valueChanged)
    tableView.addSubview(refreshControl)

    getProductList(request: productListRequest)
    getProductAvailability(request: availabilityRequest)

    // Notify tableView to reload data from another VC
    NotificationCenter.default.addObserver(self, selector: #selector(reloadTableview(_:)), name: .reload, object: nil)
}

@objc func reloadTableview(_ notification: Notification) {
        self.tableView.reloadData()
}

@objc func refreshAction(){  
    self.refreshControl.endRefreshing()
    getProductList(request: productListRequest)
    Home.productAvailableArray.removeAll()     // to append new objects for respective product
    getProductAvailability(request: availabilityRequest)
}

public func getProductList(request : ProductRequest) {
        User.apiProductList(Request: request) {(response, error) in
                let array = (response.obj as? [Products])!
                if array.count == 0{
                    print("No Products…\n")
                } else {
                    Home.productListArray = array
                    if response.isSuccess() {
                            for id in array {
                                Home.availabilityArray.removeAll()
                                Home.availableIdArray.removeAll()
                                self.getProductAvailability(request: availabilityRequest)
                                NotificationCenter.default.post(name: .reload, object: nil)
                           }                           
                        }
                }               
                }       
        }

public func getProductAvailability(request : AvailableProductRequest) {
            User.apiProductAvailability(Request:request, callback: {(response, error) in                
                    let object = response.obj as! AvailableProduct                     
                    if response.obj != nil {
                        Home. availableIdArray.append(object.productId! as! Int)
                        Home.productAvailableArray.append(object)
                     }                
                })
     NotificationCenter.default.post(name: .reload, object: nil)
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: “productcell”, for: indexPath) as! ProductViewCell
    let data = Home.productListArray[indexPath.row]

    //------------ show/hide available product view for each table row in home screen ----------------------
        for productId in Home.availableIdArray{             
            if data.productId == 0 {
                cell.availableProductView.isHidden = true
                expandedRows.remove(indexPath)
            }else{                  
                if data.productId == productId {
                    cell.availableProductView.isHidden = false
                    expandedRows.insert(indexPath)                       
                }else{
                    expandedRows.remove(indexPath)                      
                }
            }
        }
    }        
    return cell
}
...