Swift发件人UIButton更改文本

时间:2018-09-27 17:34:20

标签: ios swift uibutton sender

我有一个关注/取消关注按钮,并且正在通过“发件人”进行访问。当用户点击以跟随或取消关注另一个用户时,我正在更改文本。问题在于,当它应显示“取消关注”时,它会显示情节提要中使用的默认文本。该按钮应更改为“关注”,而不是“取消关注”。另外,我必须使用“发送者:UIButton”,因为我正在访问表视图单元格“标记”以获取正确的信息。

@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 个答案:

答案 0 :(得分:2)

您的问题是您的按钮操作中的这一行

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

您正在按钮操作中声明变量isFollow 内部。这意味着无论您关注与否,每次您的isFollower都是false,这就是遵循条件起作用的原因。但是,由于您将true重置为isFollower,因此下次跟踪按钮完成后对false所做的更改不会反映出来。

解决方案::将变量isFollow 移到按钮动作之外。

var isFollow = false

@IBAction func followButton(_ sender: UIButton) {
     // Your logic
}

您在完成情况中的逻辑似乎是错误。像下面的代码这样的东西应该可以将其更改为false

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
}

答案 1 :(得分:0)

您可以尝试将sender.titleLabel?.text替换为sender.setTitle方法吗?试一试吗?