Swift 在按钮单击上发送标签文本作为解析对象值
Posted
技术标签:
【中文标题】Swift 在按钮单击上发送标签文本作为解析对象值【英文标题】:Swift Sending Label Text on Button Click as Parse Object Value 【发布时间】:2015-05-04 19:18:32 【问题描述】:我有一个自定义 tableview 单元格,它显示 Parse 用户个人资料图像、用户名标签和一个按钮,用于将它们添加为我的 Followers 类中的“关注”对象。我的关系设置设置为“关注者”类中的“关注者”作为当前用户的用户名,“关注者”设置为单击“添加朋友”按钮的表格视图单元格的用户名。我目前尝试实现此目的的方式是向设置为indexPath.row
的按钮添加一个标签,然后添加一个目标和IBAction。从那里我将标签视图设置为标签值为1
,然后尝试将该标签设置为usernameLabel
变量,我可以使用该变量将其设置为“以下”列。不幸的是,我目前的解决方案following["following"] = usernameLabel.text as PFObject
给了我'UIView? is not convertible to 'PFObject'
。这是实现我想要做的事情的最佳方式吗?知道为什么会发生这个错误吗?
这是我的表格视图单元格:
import UIKit
class SearchUsersRegistrationTableViewCell: UITableViewCell
@IBOutlet var userImage: UIImageView!
@IBOutlet var usernameLabel: UILabel!
@IBOutlet weak var addUserButton: UIButton!
override func awakeFromNib()
super.awakeFromNib()
userImage.layer.borderWidth = 1
userImage.layer.masksToBounds = false
userImage.layer.borderColor = UIColor.whiteColor().CGColor
userImage.layer.cornerRadius = userImage.frame.width/2
userImage.clipsToBounds = true
override func setSelected(selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
这是我的表格视图功能。 (注意这是一个带有 tableview 元素的视图控制器):
import UIKit
class SearchUsersRegistrationViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
var userArray : NSMutableArray = []
@IBOutlet var tableView: UITableView!
override func viewDidLoad()
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
loadParseData()
var user = PFUser.currentUser()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
func loadParseData()
var query : PFQuery = PFUser.query()
query.findObjectsInBackgroundWithBlock
(objects:[AnyObject]!, error:NSError!) -> Void in
if error == nil
if let objects = objects
println("\(objects.count) users are listed")
for object in objects
self.userArray.addObject(object)
self.tableView.reloadData()
else
println("There is an error")
let textCellIdentifier = "Cell"
func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return self.userArray.count
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath) as! SearchUsersRegistrationTableViewCell
let row = indexPath.row
var individualUser = userArray[row] as! PFUser
var username = individualUser.username as String
var profileImage = individualUser["profileImage"] as! PFFile
profileImage.getDataInBackgroundWithBlock(
(result, error) in
cell.userImage.image = UIImage(data: result)
)
cell.usernameLabel.text = username
cell.addUserButton.tag = row
cell.addUserButton.addTarget(self, action: "addUser:", forControlEvents: .TouchUpInside)
return cell
@IBAction func addUser(sender: UIButton)
let usernameLabel = sender.superview?.viewWithTag(1)
var following = PFObject(className: "Followers")
following["following"] = usernameLabel.text as PFObject
following["follower"] = PFUser.currentUser().username //Currently logged in user
following.saveInBackground()
/* if let surtv = tableView.objectAtIndex(sender.tag) as? SearchUsersRegistrationTableViewCell
surtv.usernameLabel = sender.tag as! String
var following = PFObject(className: "Followers")
following["following"] = usernameLabel.text
following["follower"] = PFUser.currentUser().username //Currently logged in user
following.saveInBackground()
*/
@IBAction func finishAddingUsers(sender: AnyObject)
self.performSegueWithIdentifier("finishAddingUsers", sender: self)
【问题讨论】:
【参考方案1】:你不应该真的使用标签来尝试像这样导航。我知道这很诱人,但它是作弊并导致这种问题。它还鼓励您将视图用作数据存储,这也是错误的。
您已经拥有自定义单元格类SearchUsersRegistrationTableViewCell
,因此您应该利用它。给它一个属性来保存individualUser
。现在至少您可以在点击按钮时让用户从单元格中返回。
更好的是在点击按钮时让单元格更新用户,因此您根本不需要回调控制器。
更好的办法是创建一个自定义类,其中包含 individualUser
和应用新追随者并将其提供给自定义单元格的逻辑,然后单元格向该对象询问 individualUser
信息并告诉该对象何时添加关注者。这是知识和逻辑更好的分离。
【讨论】:
以上是关于Swift 在按钮单击上发送标签文本作为解析对象值的主要内容,如果未能解决你的问题,请参考以下文章
在按钮上单击清除显示的文本并在 VueJs 中调用另一个函数
在iphone中单击按钮时如何将文本字段/标签中的值添加到数组中