我在UITableViewCell中有这个向上箭头按钮,单击时可以旋转180度,或者在其他地方调用该方法。当您单击按钮并更新sender.transform时,这实际上有效。
@IBAction func rotate(sender: UIButton) {
if (top)
{
UIView.animateWithDuration(0.5, animations: {
sender.transform = CGAffineTransformMakeRotation((360.0 * CGFloat(M_PI)) / 180.0)
})
}
else
{
UIView.animateWithDuration(0.5, animations: {
sender.transform = CGAffineTransformMakeRotation((180.0 * CGFloat(M_PI)) / 180.0)
})
}
}
如果我更改代码以便我从UITableViewCell引用该按钮而不是这样,那么这不起作用。按钮不会旋转。
IBAction func rotate(sender: UIButton) {
let detailCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0)) as! DetailCell
if (top)
{
UIView.animateWithDuration(0.5, animations: {
detailCell.arrowButton.transform = CGAffineTransformMakeRotation((360.0 * CGFloat(M_PI)) / 180.0)
})
}
else
{
UIView.animateWithDuration(0.5, animations: {
detailCell.arrowButton.transform = CGAffineTransformMakeRotation((180.0 * CGFloat(M_PI)) / 180.0)
})
}
}
基本上,我希望能够在另一种不涉及单击按钮的方法中从UITableViewCell旋转按钮,因此我需要能够从UITableViewCell引用按钮并旋转它。这样做的正确方法是什么?
答案 0 :(得分:0)
您有两种不同的选择。
如果您创建write
的自定义子类,则可以向该按钮添加一个插座到该单元格。询问表格视图中的单元格,将其转换为自定义类,然后使用插座到按钮(SELECT game_id, COUNT(*) AS roundsCount,
COUNT(CASE WHEN winner = player1_id THEN 1 END) As p1WinsCount
FROM games AS g
INNER JOIN rounds AS r ON g.Id = r.game_id
GROUP BY game_id
)。
另一个选项是为按钮添加唯一标记,然后使用UITableViewCell
。然后将结果从UIView转换为UIButton。
使用myCustomCell.button
的自定义子类和插座更干净,更不易碎,但需要设置更多工作。
答案 1 :(得分:0)
至少,Duncan建议打印出来让我走上正轨。无论如何,一旦我意识到发送者和来自单元格的arrowButton具有不同的地址并且它至少在cellForRowAtIndexPath中旋转一次,我决定将该第一个arrowButton对象保存在其他地方,然后将其用于转换。像这样:
var saveArrowButton: UIButton?
在cellForRowAtIndexPath委托方法中:
if (saveArrowButton == nil)
{
saveArrowButton = detailCell.arrowButton
}
在rotate方法中:我正在引用saveArrowButton!.transform。到目前为止似乎有效。