代码之家  ›  专栏  ›  技术社区  ›  Lukas Bimba

Swift发送器按钮更改文本

  •  2
  • Lukas Bimba  · 技术社区  · 6 年前

    我有一个follow/unfollow按钮,并通过“sender”访问它。当用户点击文本以跟随或取消跟随其他用户时,我正在更改文本。问题是当它应该显示“unfollow”时,它显示的是故事板中使用的默认文本。按钮会按其应该的方式更改为“follow”,但不会更改为“unfollow”。另外,我必须使用“sender:UIButton”,因为我正在访问tableview单元格“tag”以获取正确的信息。

    @IBAction func followButton(_ sender: UIButton) {
        //self.yourFollowing.removeAll()
        //self.following.removeAll()
        self.followingTableView.reloadData()
    
        let accessData = self.yourFollowing[sender.tag].dataPass
        let businessUid = accessData["uid"] as! String
        let businessName = accessData["businessName"] as! String
        let businessStreet = accessData["businessStreet"] as! String
        let businessCity = accessData["businessCity"] as! String
        let businessState = accessData["businessState"] as! String
        let businessZip = accessData["businessZIP"] as! String
        let businessPhone = accessData["businessPhone"] as! String
        let businessLatitude = accessData["businessLatitude"] as! String
        let businessLongitude = accessData["businessLongitude"] as! String
        let businessWebsite = accessData["businessWebsite"] as! String
    
        let businessFacebook = accessData["facebookURL"] as! String
        let businessFoursquare = accessData["foursquareURL"] as! String
        let businessGoogle = accessData["googleURL"] as! String
        let businessInstagram = accessData["instagramURL"] as! String
        let businessSnapchat = accessData["snapchatURL"] as! String
        let businessTwitter = accessData["twitterURL"] as! String
        let businessYelp = accessData["yelpURL"] as! String
    
    
        let userID = Auth.auth().currentUser!.uid
        let ref = Database.database().reference()
        let key = ref.child("Businesses").childByAutoId().key
        var isFollower = false
    
        let followersRef = "followers/\(businessUid)/\(self.loggedInUserData?["uid"] as! String)"
        let followingRef = "following/" + (self.loggedInUserData?["uid"] as! String) + "/" + (businessUid)
    
    
        ref.child("Businesses").child(userID).child("following").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in
    
            if let following = snapshot.value as? [String : AnyObject] {
                for (item, value) in following {
                    if value as! String == businessUid {
                        isFollower = true
    
                        let followersRef = "followers/\(businessUid)/\(self.loggedInUserData?["uid"] as! String)"
                        let followingRef = "following/" + (self.loggedInUserData?["uid"] as! String) + "/" + (businessUid)
    
                        let childUpdates = [followingRef:NSNull(),followersRef:NSNull()]
                        self.databaseRef.updateChildValues(childUpdates)
    
                        ref.child("Businesses").child(userID).child("following/\(item)").removeValue()
                        ref.child("Businesses").child(businessUid).child("followers/\(item)").removeValue()
    
    
                        sender.titleLabel?.text = "follow"
    
    
    
                        //self.yourFollowing.removeAll()
                        self.following.removeAll()
                        self.followingTableView.reloadData()
                    }
                }
            }
    
            // Follow
            if !isFollower {
    
                sender.titleLabel?.text = "unfollow"
    
                let followersData = ["email":self.loggedInUserData?["email"] as! String, "businessName":self.loggedInUserData?["businessName"] as! String]
                let followingData = ["businessName":businessName, "businessStreet":businessStreet, "businessCity":businessCity, "businessState":businessState, "businessZIP":businessZip, "businessPhone":businessPhone, "businessWebsite":businessWebsite,"businessLatitude":businessLatitude, "businessLongitude":businessLongitude, "facebookURL":businessFacebook, "twitterURL":businessTwitter, "instagramURL":businessInstagram, "googleURL":businessGoogle, "yelpURL":businessYelp, "foursquareURL":businessFoursquare, "snapchatURL":businessSnapchat, "uid":businessUid]
    
    
                let childUpdates = [followersRef:followersData, followingRef:followingData]
                self.databaseRef.updateChildValues(childUpdates)
    
                let following = ["following/\(key)" : businessUid]
                let followers = ["followers/\(key)" : userID]
    
                ref.child("Businesses").child(userID).updateChildValues(following as Any as! [AnyHashable : Any])
                ref.child("Businesses").child(businessUid).updateChildValues(followers)
    
    
    
    
                self.yourFollowing.removeAll()
                self.following.removeAll()
                self.followingTableView.reloadData()
            }
        })
    
    
    
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Rakesha Shastri    6 年前

    你的问题是这一行在你的按钮行动

    @IBAction func followButton(_ sender: UIButton) {
        .
        .
        var isFollower = false
        .
        .
    }
    

    您正在声明变量 isFollow 里面 按钮动作。这意味着,无论是否跟随,每次 isFollower false 这就是为什么follow的条件会起作用。但是改变到 true 因为正在重置,所以下次单击按钮时不会反映“跟随完成”中的 isFollower公司 .

    解决方案: 移动变量 外部 按钮动作。

    var isFollow = false
    
    @IBAction func followButton(_ sender: UIButton) {
         // Your logic
    }
    

    也是你的 逻辑 内部完成似乎 错误的 . 类似下面的代码应该在那里改变它 .

    if value as! String == businessUid {
        isFollower = !isFollower
        if isFollower {
            // Follow logic
            sender.setTitle("unfollow", for: .normal)
        } else {
            // Unfollowed logic
            sender.setTitle("follow", for: .normal)
        }
        // Reload table
    }