代码之家  ›  专栏  ›  技术社区  ›  sarah

为什么我的表视图在滚动到底部后不显示?

  •  0
  • sarah  · 技术社区  · 6 年前

    我不知道为什么当我到达我的表视图的底部后,我的表视图会不适应。

    这是我的问题的GIF文件: http://g.recordit.co/4hizPCyctM.gif

    这是我在视图控制器中的代码

    class CheckoutVC: UIViewController {
    
        @IBOutlet weak var orderButton: DesignableButton!
        @IBOutlet weak var tableView: UITableView!
        @IBOutlet weak var floatingView: UIView!
        @IBOutlet weak var totalPriceLabel: UILabel!
    
        private let realm = RealmService.shared.realm
        private var products = [Product]()
        private var userOrder : Order?
        private var productSelected : Product?
        private var cartIsEmpty = false
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
    
        }
    
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
    
    
            RealmService.shared.observerRealmErrors() { (error) in
                self.showAlert(alertTitle: "Sorry", alertMessage: error?.localizedDescription ?? "", actionTitle: "OK")
            }
    
            userOrder = Order.getOrderFromRealmDatabase()
            guard let userOrder = userOrder else {return}
            products = Array(userOrder.products)
            tableView.reloadData()
            totalPriceLabel.text = "Total: \(userOrder.getTotalPriceFormattedWithSeparator())"
            updateUI()
    
    
    
        }
    
        override func viewWillDisappear(_ animated: Bool) {
            super.viewWillDisappear(animated)
            RealmService.shared.stopObservingErrors(in: self)
        }
    
    
        private func updateUI() {
    
            guard let userOrder = userOrder else {return}
    
    
            if userOrder.products.isEmpty  {
    
                tableView.isHidden = true
                cartIsEmpty = true
                orderButton.setTitle("Pilih Barang", for: .normal)
    
            } else {
                tableView.isHidden = false
                cartIsEmpty = false
                orderButton.setTitle("Pesan Barang", for: .normal)
            }
    
        }
    
    
    
    
    }
    
    
    //MARK: - Table View Delegate & Datasource
    extension CheckoutVC : UITableViewDataSource {
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return userOrder?.products.count ?? 0
        }
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            guard let cell = tableView.dequeueReusableCell(withIdentifier: CheckOutStoryboardData.TableViewIdentifiers.checkOutCell.rawValue, for: indexPath) as? CheckOutCell else {return UITableViewCell()}
    
            guard let userOrderInRealm = userOrder else {return UITableViewCell()}
            let products = userOrderInRealm.products
    
    
            cell.productData = products[indexPath.row]
            cell.indexPath = indexPath
            cell.delegate = self
    
            let stepperValue = Double(products[indexPath.row].quantity)
            cell.stepperValue = stepperValue
    
            return cell
        }
    
    
    }
    

    这是我在表视图单元格中的代码

    class CheckOutCell: UITableViewCell {
    
        var indexPath: IndexPath?
        var delegate: CheckOutCellDelegate?
    
    
        @IBOutlet weak var stepperGM: GMStepper!
        @IBOutlet weak var productImageView: UIImageView!
        @IBOutlet weak var productNameLabel: UILabel!
        @IBOutlet weak var subCategoryNameLabel: UILabel!
        @IBOutlet weak var pricePerUnitLabel: UILabel!
        @IBOutlet weak var priceTotalPerItemLabel: UILabel!
    
    
        var productData : Product? {
            didSet {
                updateUI()
            }
        }
    
        var stepperValue : Double? {
            didSet {
                 setStepper()
            }
        }
    
    
        @IBAction func deleteButtonDidPressed(_ sender: Any) {
            // send data to CheckoutVC
            guard let indexPath = self.indexPath else {return}
            self.delegate?.deleteButtonDidTapped(at: indexPath)
        }
    
        @IBAction func seeProductButtonDidPressed(_ sender: Any) {
            // send data to CheckoutVC
            guard let indexPath = self.indexPath else {return}
            self.delegate?.viewProductButtonDidTapped(at: indexPath)
        }
    
    
        @IBAction func GMStepperDidTapped(_ sender: GMStepper) {
            guard let indexPath = self.indexPath else {return}
            let stepperValue = Int(sender.value)
            self.delegate?.incrementOrDecrementButtonDidTapped(at: indexPath, counterValue: stepperValue)
        }
    
        func setStepper() {
            guard let stepperValue = stepperValue else {return}
            stepperGM.value = stepperValue
        }
    
        func updateUI() {
    
            guard let productData = productData else {return}
    
            // update UI
            productNameLabel.text = productData.name
            pricePerUnitLabel.text = productData.getFormattedUnitPriceWithSeparator()
            priceTotalPerItemLabel.text = productData.getFormattedTotalPriceWithSeparator()
    
    
    
            //set image
            if let imagePath = productData.imagePaths.first {
                guard let encodedImagePath = imagePath.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) else {return}
                guard let url = URL(string: encodedImagePath) else {return}
                productImageView.kf.indicatorType = .activity //loading indicator
                productImageView.kf.setImage(with: url, options: [.transition(.fade(0.2))])
            }
    
        }
    
    
    }
    

    这里是从领域数据库获取数据的代码,我从领域数据库同步获取数据。

    static func getOrderFromRealmDatabase() -> Order {
    
            let userID = "1"
            let realmService = RealmService.shared.realm
            let allOrder = realmService.objects(Order.self)
            let theOrder = allOrder.filter("userID CONTAINS[cd] %@", userID).first
    
            if let userOrder = theOrder {
                return userOrder
            } else {
                // Order never setted up before in Realm database container
                // then create Order in realm database
    
                let newOrder = Order()
                newOrder.userID = userID
                newOrder.products = List<Product>()
                RealmService.shared.save(object: newOrder)
                return newOrder
    
            }
    
        }
    

    这里出了什么问题,我不明白:(

    1 回复  |  直到 6 年前
        1
  •  1
  •   Abhishek Jadhav    6 年前

    删除NumberOfRows杀虫中的可选处理,因为产品计数从不为0。并且TableView隐藏代码永远不会被执行。

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return userOrder?.products.count
        }