【问题标题】:UIView transform inside a UITableViewCell does not workUITableViewCell 内的 UIView 转换不起作用
【发布时间】:2015-06-13 14:50:08
【问题描述】:

我在 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 引用按钮并旋转它。这样做的正确方法是什么?

【问题讨论】:

    标签: ios iphone swift uitableview uiview


    【解决方案1】:

    您有几个不同的选择。

    如果您创建UITableViewCell 的自定义子类,那么您可以向单元格添加一个出口按钮。向表格视图询问单元格,将其转换为您的自定义类,然后使用按钮的插座 (myCustomCell.button)。

    另一个选项是给按钮添加一个唯一标签,然后使用cell.contentView.viewWithTag(tagNumber)。然后将结果从 UIView 转换为 UIButton。

    使用UITableViewCell 的自定义子类和插座更清洁且不易碎,但设置工作量更大。

    【讨论】:

    • 我可能没有指定它,但箭头按钮是来自我的自定义 UITableViewCell 的 IBOutlet。我期望发送者和 detailCell.arrowButton 是相同的,并且都应该旋转。只有来自 IBAction 的发件人会旋转,并且仅当操作来自点击时才可用。如果我单击,而不是发件人,我专门从单元格中引用箭头按钮插座,它什么也不做。
    • 您的插座可能坏了。记录箭头按钮。我敢打赌它是零。
    • 我不认为它是 nil 虽然我没有记录它。当我把它放在 cellForRowAtIndexPath 中时,它不会做动画,但它会旋转 180 度,但即使我尝试重新加载数据并根据某些标志旋转它,我也无法让它再次旋转。
    • 另外,这听起来与该用户的问题相似。我在 iOS 8 中。stackoverflow.com/questions/26135655/…
    • 好的,我打印出来了,看起来他们有不同的地址。事实上,发送者一直拥有相同的地址,而从单元格引用的箭头按钮的地址发生变化,每次都不一样。我想问题是我如何获得与该发件人相同的按钮?单元格也是一样,地址每次都不一样。我期望已经可见的部分和行的 cellForRowAtIndexPath 将返回相同的地址。
    【解决方案2】:

    至少,邓肯通过建议打印出来让我走上了正确的道路。无论如何,一旦我意识到单元格中的发送者和箭头按钮具有不同的地址并且它至少在 cellForRowAtIndexPath 中旋转一次,我决定将第一个箭头按钮对象保存在其他地方,然后将其用于转换。像这样的:

    var saveArrowButton: UIButton?
    

    在 cellForRowAtIndexPath 委托方法处:

     if (saveArrowButton == nil)
     {
         saveArrowButton = detailCell.arrowButton
      }
    

    在旋转方法中:我引用的是 saveArrowButton!.transform。到目前为止,这似乎有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多