Безопасно ли использовать addTarget?
В последнее время я немного скептически отношусь к использованию addTarget() для UITableViewCell в cellForRowAtIndexPath. Мне также хотелось бы узнать, как лучше всего слушать событие кнопки от UITableViewCell.
Моя путаница начинается, когда я вижу, что у меня нет возможности отменить регистрацию прослушивателя addTarget, который я добавляю в UIButton, в UITableViewCell:
Код для cellForRowAtIndexPath:
cell.button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
Приведенный выше код регистрирует прослушиватель UIButton, который находится в UITableViewCell, но я не вижу там никакой ссылки на их отмену регистрации. Я не уверен, является ли этот процесс автоматическим или нет (для addTarget-механизма), я не нашел ни одной ссылки, которая бы говорила об этом в Apple doc (насколько я искал, по крайней мере), также.
Итак, мой вопрос: хорошо ли использовать addTarget для кнопок UITableViewCell? Все ли они отменяют регистрацию при исчезновении контроллера вида?
Или было бы хорошо, если бы я использовал addObserver?
override func viewDidLoad()
{
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "onCellButtonPressed:", name: "cellButtonPressed", object: nil)
}
func onCellButtonPressed(notification:NSNotification)
{
if let sender = notification.object as? UIButton
{
...
}
}
В коде UITableViewCell:
@IBAction func onButtonPressed(sender: AnyObject)
{
NSNotificationCenter.defaultCenter().postNotificationName("cellButtonPressed", object: sender)
}
Любое предложение по этому вопросу будет оценено.
1 ответ
Цель передана addTarget
не сохраняется. Это безопасно для использования; Вам не нужно "отменять регистрацию" (или удалять) цель. Это стандартный механизм управляющих действий (например, нажатий кнопок), и вы должны использовать его (вместо уведомлений).