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