使用swift在UITableView中添加UIButton(跟随按钮)
Posted
技术标签:
【中文标题】使用swift在UITableView中添加UIButton(跟随按钮)【英文标题】:Adding UIButton (follow button) in UITableView using swift 【发布时间】:2015-08-08 10:16:56 【问题描述】:所以这是我的问题。我从 Parse 中的 _User
类中检索了用户数据,并在应用程序中显示如下:
var data:NSMutableArray = NSMutableArray()
func loadData()
data.removeAllObjects()
var userQuery = PFUser.query()
userQuery?.orderByAscending("createdAt")
userQuery?.findObjectsInBackgroundWithBlock( (objects, erroe) -> Void in
if let objects = objects
for object in objects
if let user = object as? PFUser
if user.objectId != PFUser.currentUser()?.objectId
self.data.addObject(object)
self.tableView.reloadData()
)
override func viewDidLoad()
super.viewDidLoad()
loadData()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
// #warning Potentially incomplete method implementation.
// Return the number of sections.
return 1
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
// #warning Incomplete method implementation.
// Return the number of rows in the section.
return data.count
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let myCell = tableView.dequeueReusableCellWithIdentifier("users", forIndexPath: indexPath) as! userListTableViewCell
let userData:PFObject = self.data.objectAtIndex(indexPath.row) as! PFObject
// Usernames and gender..
myCell.fullName.text = userData.objectForKey("fullName") as! String!
myCell.genderLabel.text = userData.objectForKey("gender") as! String!
// Profile pictures..
let profilePics = userData.objectForKey("profilePicture") as! PFFile
profilePics.getDataInBackgroundWithBlock (data, error) -> Void in
if let downloadedImage = UIImage(data: data!)
myCell.dp.image = downloadedImage
return myCell
现在我想添加一个关注按钮来关注特定用户并希望在 Parse 中保存该数据。所以我的问题是:
如何有效地添加关注按钮,如果有这么多用户,这不会搞砸事情。我试过给他们tag
,比如myCell.followButton.tag = indexPath.row
,但效果很好。所以我想知道实现目标的其他方法。
在 Parse 中保存关注者列表的最佳方法是什么。我正在考虑创建一个名为 Followers
的类,其中包含 user
列:被关注的用户和 follower
我们在其中可以添加 PFUser.currentUser().objectId
。有什么比这更好的吗?或者这是一个不错的方法?
这是我的userListTableViewController
..的屏幕截图。
在这里你可以看到我已经连接到userListTableViewCell
的followButton..请帮帮我..谢谢你的时间..
【问题讨论】:
【参考方案1】:让那个按钮变成你想要的 UILabel,然后给它添加一个 UIGestureRecognizer,像这样
创建一个名为PFUserTapGestureRecognizer.swift
的swift文件
import UIKit
class PFUserTapGestureRecognizer: UITapGestureRecognizer
var tapper: PFUserTapper
init(id: Int, onTap: (id: Int) -> Void)
self.tapper = PFUserTapper()
self.tapper.id = id
self.tapper.onTap = onTap
super.init(target: self.tapper, action: Selector("userTapped"))
class PFUserTapper : NSObject
var id = 0
var onTap: ((idUse: Int) -> Void)?
func userTapped()
onTap?(idUser: id)
现在,当您在要加载 UITableView 的视图控制器中加载单元格时,在委托 tableView:cellForRowAtIndexPath:
中,执行以下操作:
// Check if you are following that user already
// if im NOT following this user then
let idUser = userData.objectForKey("id") as! Int
myCell.labelFollow.tag = idUser
myCell.labelFollow.text = "Follow"
addFollowBehavior(follow: true, idUser: idUser, label: myCell.labelFollow)
// else if i'm following the user
myCell.labelFollow.text = "Unfollow"
addFollowBehavior(follow: false, idUser: idUser, label: myCell.labelFollow)
// else.. you should consider the case when you click Follow and it takes time to get an answer from your service
并创建这个函数
func addFollowBehavior(follow follow: Bool, idUser: Int, label: UILabel)
if let recognizers = label.gestureRecognizers
for recognizer in recognizers
label.removeGestureRecognizer(recognizer as! UIGestureRecognizer)
label.addGestureRecognizer(PFUserTapGestureRecognizer(idUser,
onTap: (idUser) -> Void in
// THIS IS WHERE YOU SAVE TO PARSE, WEB SERVICE OR WHATEVER
// if follow then
// Do Follow
// else
// UnFollow...
// On the callback write this to protect from reused cells:
if label.tag = idUser
myCell.labelFollow.text = follow ? "Unfollow" : "Follow" // NOW (UN)FOLLOWING!
addFollowBehavior(follow: !follow, idUser: idUser, label: myCell.labelFollow)
)
我没有机会测试它,但我有一个非常相似的实现来满足这样的需求,而且效果很好
注意:如果后续项目是 UIImageView
或继承自 UIView
的任何内容以更酷的外观,则此方法有效,您无需更改文本,而是更改 UIImage
【讨论】:
你是如何获得关于已经被关注的用户的信息的?您能否编辑您的答案以说明我应该在哪里编写所有代码(在哪个视图控制器中)以获得更多解释?谢谢 您应该将您已经关注的用户的信息保存在某处,并且您添加到单元格的代码非常清晰(我还是编辑了它),在您显示的视图控制器中使用它UITableView,我没有误解你有一个 UIButton,我实际上是建议你把它变成一个 UILabel 或 UIImageView,而不是 我的@IBOutlet var followButtton: UIButton!
中有UITableViewCell
我需要在这里更改什么吗??
就像您将按钮添加到界面,然后将其链接到您的类,但使用 UILabel 执行相同操作
你能用关注者数据更新它吗?因为这段代码有很多错误:/以上是关于使用swift在UITableView中添加UIButton(跟随按钮)的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 2.0 中将图像添加到 UITableView
如何在 Swift 3 中以编程方式在 UIImageview 中添加 UITableview
Swift:将包含自定义标签的单元格添加到 UITableView