如何仅在您自己发布的帖子上显示 uitableviewcell 上的编辑按钮

How to show edit button on uitableviewcell, only on the posts you posted yourself

我正在制作一个具有登录功能的应用程序,您可以在其中 post、编辑和删除自己喜欢的地点,以及为其他用户的 post 点赞。

我正在尝试实现一个编辑按钮,该按钮仅显示在您 post 自己编辑的 post 上,而在 post 上对其他人隐藏。

我有我的 FeedViewController,我在其中调用 UITableviewCell class 中的 'configureCell function'。这是 FeedViewController 中的部分代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if let cell = tableView.dequeueReusableCellWithIdentifier("PostCell") as? PostCell {
        let postList = searchController.active ? searchResult[indexPath.row] : posts[indexPath.row]
        let post = postList
        cell.request?.cancel()

        var image: UIImage?
        if let url = post.postImgUrl {
            image = FeedVC.imageCache.objectForKey(url) as? UIImage
        }

        var image2: UIImage?
        if let url2 = post.userImgUrl {
            image2 = FeedVC.imageCache.objectForKey(url2) as? UIImage
        }

        cell.configureCell(post, img: image, img2: image2)

        return cell
    } else {
        return PostCell()
    }
}

这是我的 UITableviewCell 中的代码(class PostCell:UITableViewCell):

func configureCell(post: Post, img: UIImage?, img2: UIImage?) {
    self.post = post
    likeRef = DataService.ds.REF_USER_CURRENT.childByAppendingPath("likes").childByAppendingPath(post.postKey)

    self.descriptionText.text = post.postDescription
    self.descriptionText.scrollRangeToVisible(NSMakeRange(0, 0))
    self.likesLbl.text = "\(post.likes)"
    self.postTitle.text = post.postTitle
    self.postLocation.text = post.postLocation
    self.username.text = post.username
    self.postKeyLbl.text = post.key

    if post.postImgUrl != nil {
        if img != nil {
            self.showcaseImg.image = img
        } else {
            request = Alamofire.request(.GET, post.postImgUrl!).validate(contentType: ["image/*"]).response(completionHandler: { request, response, data, err in
                if err == nil {
                    let _img = UIImage(data: data!)!
                    self.showcaseImg.image = img
                    FeedVC.imageCache.setObject(_img, forKey: self.post.postImgUrl!)
                } else {
                    print(err.debugDescription)
                }
            })
        }
    } else {
        self.showcaseImg.hidden = true
    }

    if post.userImgUrl != nil {
        if img2 != nil {
            self.profileImg.image = img2
        } else {
            request = Alamofire.request(.GET, post.userImgUrl!).validate(contentType: ["image/*"]).response(completionHandler: { request, response, data, err in
                if err == nil {
                    let _img2 = UIImage(data: data!)!
                    self.profileImg.image = img2
                    FeedVC.imageCache.setObject(_img2, forKey: self.post.userImgUrl!)
                } else {
                    print(err.debugDescription)
                }
            })
        }
    } else {
        print("no image")
    }

    likeRef.observeSingleEventOfType(.Value, withBlock: { snapshot in
        if snapshot.value is NSNull {
            self.likesImg.image = UIImage(named: "heart")
        } else {
            self.likesImg.image = UIImage(named: "heart-filled")
        }
    })

    let getUid = NSUserDefaults.standardUserDefaults().valueForKey(KEY_UID)
    if String(getUid!) == (self.post.postUid) {
        editBtn.hidden = false
        delBtn.hidden = false
   }

}

关于最后一部分:

let getUid = NSUserDefaults.standardUserDefaults().valueForKey(KEY_UID)
    if String(getUid!) == (self.post.postUid) {
        editBtn.hidden = false
        delBtn.hidden = false

}

那部分不工作。编辑(和删除)按钮显示在特定用户的 post 中,但也显示在其他用户的某些 post 中。我不知道我做错了什么。可能是因为我还实现了 'sorting data function',我在其中对 'date' 或 'likes' 上的 post 进行排序。当 post 重新洗牌时,更多编辑按钮会出现在随机单元格(来自其他用户)上。

但我真的不知道。我希望有人能帮助我!?如果您需要更多代码,请告诉我:-) 非常感谢!

亲切的问候, 迪德

为此添加一个 else 子句:

if String(getUid!) == (self.post.postUid) {
    editBtn.hidden = false
    delBtn.hidden = false
} else {
    editBtn.hidden = true
    delBtn.hidden = true
}

因为您正在重复使用单元格,所以按钮可能未被隐藏的某些单元格因为它与某个用户的 post 相关联,可能会被另一个 post 的另一个用户重复使用用户。由于您没有处理这种情况的 else 子句,那些 'hidden' 属性 最初设置为 false 的按钮将保持不隐藏状态,即使 postUid 和 getUid 不匹配。希望这对您有所帮助!