2015-06-13 12 views
0

У меня есть эта кнопка со стрелкой вверх в UITableViewCell, которая должна вращаться на 180 градусов при нажатии или когда метод вызывается в другом месте. Это действительно работает, когда вы нажимаете кнопку и обновляете sender.transform.Преобразование UIView внутри UITableViewCell не работает

@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

У вас есть несколько различных вариантов.

Если вы создадите собственный подкласс UITableViewCell, вы можете добавить к нему кнопку выхода в ячейку. Задайте представление таблицы для ячейки, отбросьте ее в свой собственный класс, а затем используйте розетку на кнопке (myCustomCell.button).

Другой вариант - добавить к тегу уникальный тег, а затем использовать cell.contentView.viewWithTag(tagNumber). Затем переведите результат из UIView в UIButton.

Использование пользовательского подкласса UITableViewCell, а розетка чище и менее хрупкая, но больше работы по настройке.

+0

Возможно, я не указал его, но стрелкаButton - это IBOutlet из моего пользовательского UITableViewCell. Я ожидаю, что отправитель и detailCell.arrowButton будут одинаковыми и должны вращаться. Только отправитель из IBAction вращается, и это доступно только в том случае, если действие происходит от щелчка. Если я нажму, и вместо отправителя я конкретно ссылаюсь на выходы стрелки из ячейки, он ничего не делает. – inquiringmind

+0

У вас, вероятно, сломанный выход. Журнал arrowButton. Держу пари, что это ноль. –

+0

Я не думаю, что это ноль, хотя я не зарегистрировал его. Когда я помещаю его в cellForRowAtIndexPath, он не делает анимацию, но поворачивает ее 180, но затем я не могу заставить ее вращаться снова, даже если я попытаюсь перезагрузить Data и повернуть ее на основе некоторого флага. – inquiringmind

0

По крайней мере, Дункан получил меня на правильном пути, предложив распечатать. Во всяком случае, как только я понял, что отправитель и стрелкаButton из ячейки имеют разные адреса, и он по крайней мере вращается один раз в cellForRowAtIndexPath, я решил сохранить этот первый объект arrowButton где-то еще, а затем использует его для преобразования. Что-то вроде этого:

var saveArrowButton: UIButton? 

В методе cellForRowAtIndexPath делегат:

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

И в методе циклического сдвига: Я ссылки saveArrowButton .transform!. Это пока работает.