Ios 我如何调用其他类按钮-Swift
我有一个newCell类:Ios 我如何调用其他类按钮-Swift,ios,swift,Ios,Swift,我有一个newCell类: class newCell: UITableViewCell { override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated)
class newCell: UITableViewCell {
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
@IBOutlet weak var recipeImage: UIImageView!
@IBOutlet weak var recipeTitle: UILabel!
@IBOutlet weak var favoriteButton: UIButton!
@IBAction func favoriteAction(sender: AnyObject) {
}
在HomeViewController中,我使用这个newCell类作为表视图的原型单元。对于文本和图像来说,它工作得很好。我的疑问是,如何在HomeViewController中处理此原型单元的按钮?
例如,我希望按钮根据传递的数组更改其图像
override func viewDidLoad() {
super.viewDidLoad()
var recipesFeed = PFQuery(className: "Recipe")
recipesFeed.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if let recipes = objects {
self.recipes.removeAll(keepCapacity: true)
self.recipeImages.removeAll(keepCapacity: true)
self.isFavorite.removeAll(keepCapacity: true)
for recipe in recipes{
self.recipes.append(recipe["title"] as! String)
self.recipeImages.append(recipe["image"] as! String)
self.isFavorite.append(recipe["isFavorite"] as! Int)
self.tableView.reloadData()
}
}
}
}
您的tableviewcell中已经有一个action
favoriteAction
。问题的简单解决方案是将可能的图像数组在出列时传递到tableviewcell,然后将替换图像的代码放入favoriteAction
iAction
如果您无法从我上面的描述中了解到该做什么,我可以发布一些代码,但请先尝试了解它。我认为这是一个很好的学习练习。您的tableviewcell中已经有一个action
favoriteAction
。问题的简单解决方案是将可能的图像数组在出列时传递到tableviewcell,然后将替换图像的代码放入favoriteAction
iAction
如果您无法从我上面的描述中了解到该做什么,我可以发布一些代码,但请先尝试了解它。我认为这是一个很好的学习练习。因此我访问HomeViewController中
数组的方法是使用带有两个协议的委派模式
protocol hasFavBtn {
var delegate: FavBtnDelegate! { get set }
var delegateTableView: UITableView! { get set }
}
protocol FavBtnDelegate {
var isFavorited: [Int] { get set }
}
为使其正常工作,NewCell
类应符合hasFavBtn
协议,HomeViewController应符合FavBtnDelegate
协议。像这样:
HomeViewController
这里需要注意的重要事项是:
在cellforrowatinexpath
中,在返回NewCell
常量之前,定义NewCell
类实例的delegate
和delegateTableView
属性
isFavorited
变量按照FavBtnDelegate
协议中的说明进行设置
纽赛尔·斯威夫特
正如其他人所说,在这里,UITableViewCell
子类中,您应该为收藏夹按钮定义@IBAction
。您可以通过委托属性引用tableView和isFavorited
数组,因为在cellForRowAtIndexPath
中,delegateTableView
属性的值设置为HomeViewController的tableView,而delegate
属性设置为HomeViewController实例(使用self
关键字)
因此,favoritebtpressed
函数找到中心(CGPoint
)按下的按钮的中心,然后将其转换为delegateTableView
的坐标系,从而转换为HomeViewController中的tableView。使用tableView坐标系中按钮的转换中心,代码使用if-let绑定为转换中心安全地展开indexPath
。然后使用展开的indepath
和delegate
属性,可以检查给定indepath
处HomeViewController的是否为Favorited
数组值是否等于1,并相应地调整图像
swift的协议和委托模式非常强大,在很多方面都非常有用。您可以在此处阅读更多关于它们的信息:
另外,请注意,我将图像放在Assets.xcsets文件中,因此使用imageLiteral初始值设定项来获取它们
希望这有帮助!如果您有任何问题,请随时提问!因此,我最喜欢访问HomeViewController中的数组的方法是使用带有两个协议的委派模式
protocol hasFavBtn {
var delegate: FavBtnDelegate! { get set }
var delegateTableView: UITableView! { get set }
}
protocol FavBtnDelegate {
var isFavorited: [Int] { get set }
}
为使其正常工作,NewCell
类应符合hasFavBtn
协议,HomeViewController应符合FavBtnDelegate
协议。如下所示:
HomeViewController
这里需要注意的重要事项是:
在cellforrowatinexpath
中,在返回NewCell
常量之前,定义NewCell
类实例的delegate
和delegateTableView
属性
isFavorited
变量按照FavBtnDelegate
协议中的说明进行设置
纽赛尔·斯威夫特
正如其他人所说,在这里,UITableViewCell
子类中,您应该为收藏夹按钮定义@IBAction
。您可以通过委托属性引用tableView和isFavorited
数组,因为在cellforrowatinexpath
中,delegateTableView
属性设置为HomeViewController的tableView,而委托
属性设置为HomeViewController实例(使用self
关键字)
因此,favoritebtpressed
函数找到中心(CGPoint
)按下的按钮的中心,然后将其转换为delegateTableView
的坐标系,从而转换为HomeViewController中的tableView。使用tableView坐标系中按钮的转换中心,代码使用if-let绑定为转换中心安全地展开indexPath
。然后使用展开的indepath
和delegate
属性,可以检查给定indepath
处HomeViewController的是否为Favorited
数组值是否等于1,并相应地调整图像
swift的协议和委托模式非常强大,在很多方面都非常有用。您可以在此处阅读更多关于它们的信息:
另外,请注意,我将图像放在Assets.xcsets文件中,因此我使用imageLiteral初始值设定项来获取
class ViewController: UITableViewController, FavBtnDelegate {
var isFavorited = [0, 0, 0, 0, 1]
let newCellStr = "NewCell"
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let newCell = tableView.dequeueReusableCellWithIdentifier(newCellStr) as! NewCell
newCell.delegate = self
newCell.delegateTableView = tableView
return newCell
}
}
class NewCell: UITableViewCell, hasFavBtn {
var delegate: FavBtnDelegate!
var delegateTableView: UITableView!
@IBOutlet weak var favoriteBtn: UIButton!
let blankStarImg = UIImage(imageLiteral: "blankStar")
let fullStarImg = UIImage(imageLiteral: "fullStar")
override func awakeFromNib() {
super.awakeFromNib()
let blankStarImg = UIImage(imageLiteral: "blankStar")
favoriteBtn.setBackgroundImage(blankStarImg, forState: .Normal)
}
@IBAction func favoriteBtnPressed(sender: AnyObject) {
let locationInCell = CGPoint(x: (sender.frame.maxX - sender.frame.minX)/2, y: (sender.frame.maxY - sender.frame.minY)/2)
let locationInDelegateTableView = convertPoint(locationInCell, toView: delegateTableView)
if let indexPath = delegateTableView.indexPathForRowAtPoint(locationInDelegateTableView) {
if delegate.isFavorited[indexPath.row] == 1 {
favoriteBtn.setBackgroundImage(fullStarImg, forState: .Normal)
}
}
}