从tableview中删除特定部分后如何隐藏tableview中的部分?

时间:2017-06-16 08:47:14

标签: ios uitableview swift3

我有三个部分(see the image),其中一个部分是显示项目,剩下的两个单元格是使用stroyboard设计的,如果我在第一部分使用删除按钮删除所有项目然后剩下的两个部分需要隐藏,并显示一些文字可以任何人帮助我如何做到这一点?

func numberOfSections(in tableView: UITableView) -> Int{
    // #warning Incomplete implementation, return the number of sections
    return 3
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
    if (section == 0){
        return itemsArray.count
    }else{
        return 1
    }
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if indexPath.section == 0{
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! productTableViewCell
        tableDetails.isHidden = false
        myActivityIndicator.stopAnimating()
        let arr = itemsArray[indexPath.row]
        let urls = NSURL(string: arr["img"] as! String)
        let data = NSData (contentsOf: urls! as URL)
        cell.imageview.image = UIImage(data: data! as Data)
        cell.nameLabel.text = arr["productName"]as! String
        var price = arr["productPrice"] as! String
        print(price)
        var Quantity : Float = 1
        let itemId : Int =  arr["sku"] as! Int
        print(itemId)
        for aDic in CartArray{
            if aDic["id"] == String(itemId){

                Quantity = Float(String(aDic["quantity"]!))!
            }
        }
        print(CartArray)
        cell.stepper.value = Double(Int(Quantity))
        cell.stepper.tag = indexPath.row
        cell.stepper.addTarget(self, action: #selector(stepperValueChange(stepper:)), for:.valueChanged)
        price = price.replacingOccurrences(of: "KD", with: "")
        cartstring = String(Float(price)! * Quantity) + "0KD"
        cell.priceLabel.text = cartstring
        let quantityText = String(Quantity)
        let endIndex = quantityText.index(quantityText.endIndex, offsetBy: -2)
        let truncated = quantityText.substring(to: endIndex)
        cell.quantityTextField.text = truncated
        cell.price = price
        cell.deleteButton.addTarget(self, action: #selector(deleteButtonAction(button:)), for: .touchUpInside)
        cell.deleteButton.tag = indexPath.row
        return cell
    }else if indexPath.section == 1{
        let cell = tableView.dequeueReusableCell(withIdentifier: "couponcell", for: indexPath) as! CouponTableViewCell
        cell.applyButton.addTarget(self, action: #selector(applyButtonAction(button:)), for: .touchUpInside)
        return cell
    }else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "checkout", for: indexPath) as! checkoutTableViewCell
        cell.finalCartpriceLabel.text = total
        return cell
    }
}
func deleteButtonAction(button : UIButton) {
        let buttonPosition = button.convert(CGPoint(), to: tableDetails)
        let index = tableDetails.indexPathForRow(at: buttonPosition)
        self.itemsArray.remove(at: (index?.row)!)
        self.tableDetails.deleteRows(at: [index!], with: .automatic)
        tableDetails.reloadData()
     }

5 个答案:

答案 0 :(得分:0)

您只需检查self.itemsArray.count > 0中的func numberOfSections(in:),然后显示此条件的所有三个部分。否则,只返回第一部分,这将自动隐藏另外两部分。

示例:

func numberOfSections(in tableView: UITableView) -> Int {
    if self.itemsArray.count > 0 {
        return 3
    }
    return 1
}

答案 1 :(得分:0)

使用以下内容修改numberOfSections

func numberOfSections(in tableView: UITableView) -> Int {
    if self.itemsArray.count > 0 {
        return 3
    }
    //Show Message List is Empty
    return 1
}

答案 2 :(得分:0)

您可以管理类似的内容,

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
if (section == 0){
    return itemsArray.count
}else{


    if self.itemsArray.count == 0 {
    return 0
   }
   else{
        return 1
     }
}

 }

答案 3 :(得分:0)

在numberOfSection数据源方法中,检查itemArray是否没有元素,只返回一个部分。在cellForRowAtIndexPath中,再次检查相同的条件,并在此显示空文本。

func numberOfSections(in tableView: UITableView) -> Int {
    if(itemArray.count > 0)
    {
      if (section == 0){
        return itemsArray.count
      }else{
        return 1
      }
    } else {
       return 1;
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if(itemArray.count > 0)
    {
    }else {
       //Show empty text view
    }
}

答案 4 :(得分:0)

这段代码非常适合我

func deleteButtonAction(button : UIButton) {
        let buttonPosition = button.convert(CGPoint(), to: tableDetails)
        let index = tableDetails.indexPathForRow(at: buttonPosition)
        self.itemsArray.remove(at: (index?.row)!)
        self.tableDetails.deleteRows(at: [index!], with: .automatic)
        tableDetails.reloadData()
        if (tableView(tableDetails, numberOfRowsInSection: 0) == 0){
            tableDetails.isHidden = true
        }
        if (tableDetails.isHidden == true){
            self.loadingLabel.textColor = UIColor.gray
            self.loadingLabel.textAlignment = NSTextAlignment.center
            self.loadingLabel.text = "Your shopping cart is empty"
            self.loadingLabel.frame = CGRect(x: 130, y: 320, width: 140, height: 30)
            view.addSubview(loadingLabel)
            }
}