Ios 第一次之后获取重复的tableview单元格

Ios 第一次之后获取重复的tableview单元格,ios,swift,uitableview,firebase,firebase-realtime-database,Ios,Swift,Uitableview,Firebase,Firebase Realtime Database,在我的应用程序中,有一个添加按钮,单击会添加一个新的tableviewcell。然而,问题是我在第一次之后得到了重复的单元格。基本上,当我第二次点击时,我会得到2个重复,第三次点击时会得到3个,以此类推。。。。请查看屏幕截图的图像: 上图是第一个屏幕。单击“+”将添加一个新单元格,如下图所示: 现在储蓄之后,, 现在,如果我离开这个视图并返回,再次单击“添加”并创建一个新的单元格,它将为我提供上述段落中提到的副本(即,第二次2个,第三次3个,依此类推……)。 以下是截图: 以下是我正在使用

在我的应用程序中,有一个添加按钮,单击会添加一个新的tableviewcell。然而,问题是我在第一次之后得到了重复的单元格。基本上,当我第二次点击时,我会得到2个重复,第三次点击时会得到3个,以此类推。。。。请查看屏幕截图的图像:

上图是第一个屏幕。单击“+”将添加一个新单元格,如下图所示:

现在储蓄之后,,

现在,如果我离开这个视图并返回,再次单击“添加”并创建一个新的单元格,它将为我提供上述段落中提到的副本(即,第二次2个,第三次3个,依此类推……)。 以下是截图:

以下是我正在使用的代码:

 @IBAction func addBasket(_ sender: UIButton) {

    let prefs         = UserDefaults.standard
    let status        = prefs.string(forKey: "status")

    if(status != nil){

        if( status == "pending"){

            if(BasketItemList.count < 5 ) {

                self.addpost()

            } else {


                let alert = SCLAlertView()
                alert.showWarning("Basket", subTitle: "Upgrade to add more")

            }



        } else {

            if(BasketItemList.count < 50 ) {

                self.addpost()

            } else {

                let alert = SCLAlertView()
                alert.showWarning("Basket", subTitle: "Upgrade to add more")

            }



        }


    }



}


func addpost() {

    let appearance = SCLAlertView.SCLAppearance(
        showCloseButton: false
    )

    let alert = SCLAlertView(appearance : appearance)
    let txt = alert.addTextField("Enter name")
    alert.addButton("Save") {

        if txt.text?.characters.count != 0 {

            let basketname : String = txt.text!

            let userID = FIRAuth.auth()?.currentUser?.uid

            let postitem : [String :AnyObject] = ["userid" : userID! as AnyObject , "basketname" : basketname as AnyObject ]

            let dbref = FIRDatabase.database().reference()
            dbref.child("BasketList").childByAutoId().setValue(postitem)

            self.Basketdata2()



            let appearance = SCLAlertView.SCLAppearance(
                kDefaultShadowOpacity: 0,
                showCloseButton: false
            )

            let alertView = SCLAlertView(appearance: appearance)
            alertView.showTitle(
                "Saved", // Title of view
                subTitle: "", // String of view
                duration: 2.0, // Duration to show before closing automatically, default: 0.0
                completeText: "Done", // Optional button value, default: ""
                style: .success, // Styles - see below.
                colorStyle: 0xA429FF,
                colorTextButton: 0xFFFFFF
            )




        } else {


            let alert = SCLAlertView()
            alert.showError("Oops!", subTitle: "Basket name should not be empty")

            self.tableviewbasket.reloadData()

        }

    }
    alert.addButton("Cancel"){


    }
    alert.showEdit("Add basket", subTitle: "Please enter your basket name")




}

func Basketdata2() {
    HUD.show(.labeledProgress(title: "Loading...", subtitle: ""))

    let databaseref = FIRDatabase.database().reference()
    var userID = FIRAuth.auth()?.currentUser?.uid

    if userID == nil {

        userID = userfbid
    }

    databaseref.child("BasketList").queryOrdered(byChild: "userid").queryEqual(toValue: userID!).observeSingleEvent(of: .value, with: { (snapshot) in

        if snapshot.exists() {

            self.tableviewbasket.backgroundView = nil;
            HUD.hide()

        }  else {

            HUD.hide()


            self.tableviewbasket.setContentOffset(CGPoint(x : 0, y: -98), animated: true)


            if (self.BasketItemList.count == 0) {

                // tableView is empty. You can set a backgroundView for it.
                let label = UILabel(frame: CGRect(x: 5, y: 0, width: self.tableviewbasket.bounds.size.width, height:self.tableviewbasket.bounds.size.height))
                label.text = "The best preparation for tomorrow \n is doing your best today.\n Please create your first basket."
                label.textColor = UIColor.black;
                label.textAlignment = .center
                label.numberOfLines = 4
                label.sizeToFit()
                label.font = UIFont(name: "AvenirNext-Regular", size: 16.0)
                self.tableviewbasket.backgroundView = label;
                self.tableviewbasket.separatorStyle = .none;

            }

        }

    })
}


  func Basketdata() {

    HUD.show(.labeledProgress(title: "Please wait...", subtitle: ""))

    self.BasketItemList.removeAll()
    self.Basketid.removeAll()

    let databaseref = FIRDatabase.database().reference()
    let userID = FIRAuth.auth()?.currentUser?.uid

    databaseref.child("BasketList").queryOrdered(byChild: "userid").queryEqual(toValue: userID!).observeSingleEvent(of: .value, with: { (snapshot) in

        if snapshot.exists() {

            databaseref.child("BasketList").queryOrdered(byChild: "userid").queryEqual(toValue: userID!).observe(.childAdded, with: {
                (snapshot) in



                if let dictionary = snapshot.value as? [String : AnyObject] {


                    let basketitem = BasketList(text : "")
                    basketitem.setValuesForKeys(dictionary)

                    self.BasketItemList.append(basketitem)
                    self.Basketid.append(snapshot.key)
                    DispatchQueue.main.async {

                        if !self.BasketItemList.isEmpty {

                            HUD.hide()
                            self.tableviewbasket.reloadData()

                        }

                    }


                } else {

                    self.tableviewbasket.reloadData()
                    HUD.hide()
                }


            })




        }  else {

            if (self.BasketItemList.count == 0) {

                // tableView is empty. You can set a backgroundView for it.
                let label = UILabel(frame: CGRect(x: 5, y: 0, width: self.tableviewbasket.bounds.size.width, height:self.tableviewbasket.bounds.size.height))
                label.text = "The best preparation for tomorrow \nis doing your best today"
                label.textColor = UIColor.black;
                label.textAlignment = .center
                label.numberOfLines = 2
                label.sizeToFit()
                label.font = UIFont(name: "AvenirNext-Regular", size: 16.0)
                self.tableviewbasket.backgroundView = label;
                self.tableviewbasket.separatorStyle = .none;

            }


            HUD.hide()


        }

    })




}
@IBAction func addBasket(uu发送方:ui按钮){
让prefs=UserDefaults.standard
let status=prefs.string(forKey:“status”)
如果(状态!=nil){
如果(状态=“待定”){
if(BasketItemList.count<5){
self.addpost()
}否则{
let alert=SCLAlertView()
警报。显示警告(“篮子”,副标题:“升级以添加更多”)
}
}否则{
if(BasketItemList.count<50){
self.addpost()
}否则{
let alert=SCLAlertView()
警报。显示警告(“篮子”,副标题:“升级以添加更多”)
}
}
}
}
func addpost(){
让外观=SCLAlertView.SCLAppearance(
showCloseButton:错误
)
let alert=SCLAlertView(外观:外观)
让txt=alert.addTextField(“输入名称”)
alert.addButton(“保存”){
如果txt.text?.characters.count!=0{
让basketname:String=txt.text!
让userID=FIRAuth.auth()?.currentUser?.uid
let positem:[字符串:AnyObject]=[“userid”:userid!作为AnyObject,“basketname”:basketname作为AnyObject]
让dbref=FIRDatabase.database().reference()
dbref.child(“BasketList”).childByAutoId().setValue(positem)
self.Basketdata2()
让外观=SCLAlertView.SCLAppearance(
kDefaultShadowOpacity:0,
showCloseButton:错误
)
让alertView=SCLAlertView(外观:外观)
alertView.showTitle(
“已保存”,//视图标题
副标题:,//视图字符串
持续时间:2.0,//自动关闭前显示的持续时间,默认值:0.0
completeText:“完成”//可选按钮值,默认值:
样式://成功,//样式-请参见下文。
颜色样式:0xA429FF,
colorTextButton:0xFFFFFF
)
}否则{
let alert=SCLAlertView()
alert.bathror(“哎呀!”,副标题:“篮子名称不应为空”)
self.tableviewbasket.reloadData()
}
}
alert.addButton(“取消”){
}
alert.showEdit(“添加篮子”,副标题:“请输入篮子名称”)
}
func Basketdata2(){
显示(.labeledProgress(标题:“加载…”,副标题:))
让databaseref=FIRDatabase.database().reference()
var userID=FIRAuth.auth()?.currentUser?.uid
如果userID==nil{
userID=userfbid
}
databaseref.child(“BasketList”).queryOrdered(byChild:“userid”).queryEqual(toValue:userid!).observeSingleEvent(of:.value,其中:{(快照))位于
如果snapshot.exists()存在{
self.tableviewbasket.backgroundView=nil;
隐藏
}否则{
隐藏
self.tableviewbasket.setContentOffset(CGPoint(x:0,y:-98),动画:true)
if(self.BasketItemList.count==0){
//tableView为空。您可以为其设置背景视图。
让label=UILabel(帧:CGRect(x:5,y:0,宽度:self.tableviewbasket.bounds.size.width,高度:self.tableviewbasket.bounds.size.height))
label.text=“为明天做最好的准备\n就是今天做到最好。\n请创建您的第一个篮子。”
label.textColor=UIColor.black;
label.textAlignment=.center
label.numberOfLines=4
label.sizeToFit()
label.font=UIFont(名称:“AvenirNext常规”,大小:16.0)
self.tableviewbasket.backgroundView=标签;
self.tableviewbasket.separatorStyle=.none;
}
}
})
}
func Basketdata(){
HUD.show(.labeledProgress(标题:“请稍候…”,副标题:“”)
self.BasketItemList.removeAll()
self.Basketid.removeAll()
让databaseref=FIRDatabase.database().reference()
让userID=FIRAuth.auth()?.currentUser?.uid
databaseref.child(“BasketList”).queryOrdered(byChild:“userid”).queryEqual(toValue:userid!).observeSingleEvent(of:.value,其中:{(快照))位于
如果snapshot.exists()存在{
databaseref.child(“BasketList”).queryOrdered(byChild:“userid”).queryEqual(toValue:userid!)。观察(.childAdded,带有:{
(快照)在
如果let dictionary=snapshot.value as?[字符串:AnyObject]{
let basketitem=篮子列表(文本:“”)
basketitem.setValuesForKeys(字典)
self.BasketItemList.append(basketitem)
self.Basketid.append(snapshot.key)
DispatchQueue.main.async{
if!self.BasketItemList.isEmpty{
隐藏
self.tableviewbasket.reloadData()
}
}
}否则{
self.tableviewbasket.reloadData()
隐藏
}
})
}否则{
if(self.BasketItemList.count==0){
//tableView为空。您可以继续