У меня есть 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
}