为什么滚动到底部后我的表视图消失了?

时间:2018-12-20 05:20:54

标签: ios swift uitableview

我不知道为什么我到达表格视图的底部后消失了。

这是我的问题的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 个答案:

答案 0 :(得分:1)

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

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