Проверьте, был ли просмотр удален или нет? - PullRequest
2 голосов
/ 19 октября 2011

У меня есть класс UIView, который я сейчас удаляю из своего представления, используя изнутри класс [self removeFromSuperview].Надеюсь, это правильно.

Однако теперь из моего контроллера представлений (к которому я добавляю это представление) мне нужно знать, когда он удалился, чтобы я мог вызывать метод, когда это происходит.

Любая помощьбудет признателен, спасибо.

Ответы [ 5 ]

1 голос
/ 19 октября 2011

Вообще говоря, представление не должно делать такие вещи, как удаление самого себя. Это работа контроллера представления.

Если подкласс UIView может генерировать события, которые требуют изменения иерархии представления, я бы определил свойство delegate для этого представления, а когда событие происходит, вызовите метод для этого делегата. Затем, когда ваш контроллер представления добавляет представление, он устанавливает себя в качестве делегата и определяет соответствующий метод для обработки события.

0 голосов
/ 19 октября 2011

Не уверен, какой SDK вы используете - но я использую iOS 5, и я просто использую следующий метод в суперпредставлении:

-(void)willRemoveSubview:(UIView *)subview{
    if([subview isEqual:someView]){
      //do stuff
    }
    //you could do some stuff here too
}
0 голосов
/ 19 октября 2011

Наилучшим выбором будет позволить контроллеру удалить представление

[self.view removeFromSuperview];

и узнать, был ли вид удален (или никогда не добавлен), вы можете спросить

if(![self.view superview]) {
    //no superview means not in the view hierarchy
}
0 голосов
/ 19 октября 2011

Я предполагаю, что вы делаете вызов удаления после какого-либо действия, например, нажатия кнопки или чего-то еще. если это так, установите делегат кнопок как контроллер представления, а не как класс представления, и внутри метода действия в контроллере представления вызовите

[yourCustomView removeFromSuperview];
0 голосов
/ 19 октября 2011

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

«removeFromSuperview» всегда казалось мне задом наперед…: (

...