ios - 为什么我的表格 View 在滚动到底部后消失了?

标签 ios swift uitableview

我不知道为什么我的 TableView 在到达 TableView 底部后消失了。

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

这是我的 View Controller 中的代码

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
    }


}

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

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

        }

    }

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

最佳答案

删除 numberOfRowsInSection 中的可选处理,因为产品计数永远不会为 0。并且永远不会执行 tableview 隐藏代码。

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

关于ios - 为什么我的表格 View 在滚动到底部后消失了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53862812/

相关文章:

ios - 从给定数字生成随机数

ios - 启动应用程序并导航到之前显示的 View

swift - 在 Swift 中使用 "/"的 Base64Encoding 结果字符串

ios - Cocos2d:在运行时为Sprite节点中批处理的CCSprite设置zOrder似乎无效

ios - 仅通过 wifi 下载内容或同时使用 wifi 和 3G 网络下载

ios - 无法在自定义 TableView 单元格中加载图像

ios - UITableViewCells 的手势识别器

ios - 单元格中有多个按钮,可将选定的按钮设置为单元格数据

ios - 在调用 didReceiveRemoteNotification 时遇到问题

ios - 我无法加载动画,并且在加载请求后无法将其删除