Удаление вида из его суперпредставления - PullRequest
1 голос
/ 13 января 2012

Я добавил несколько кнопок в self.view. Когда пользователь нажимает на одну кнопку, я загружаю другое представление (subView). Мой код, куда я загружаю подпредставление, показан ниже

subView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.scrollView.contentSize.width, self.scrollView.contentSize.height)];
subView.tag=1;
// and then i add various other components to it

[self.view addSubview:subView]; // and finally add it to the view

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

Вот так я удаляю вид

UIView *v = [self.subView viewWithTag:1];
    v.hidden = YES;
    [v endEditing:YES];
 [v removeFromSuperview];

Вид исчезает, но я не могу нажимать кнопки или что-либо, что было в self.view. Когда я на некоторое время удерживаю курсор мыши на кнопке, я могу нажать на нее, иначе я не могу. Как я могу решить это?

Ответы [ 3 ]

3 голосов
/ 13 января 2012

Попробуйте удалить подпредставление следующим образом:

for (UIView *subView in self.view.subviews) {
    if (subView.tag == (int)yourSubViewTag) {

        [subView removeFromSuperview];
    }
}
2 голосов
/ 13 января 2012

Если эта строка:

UIView *v = [self.subView viewWithTag:1];

действительно быть:

UIView *v = [self.view viewWithTag:1];

1 голос
/ 13 января 2012

Я думаю, что ваша проблема в том, что вы делаете

[self.subView viewWithTag:1];

но представление, которое вы хотите удалить, "принадлежит" self.view, поэтому оно должно быть

[self.view viewWithTag:1];

Но если у вас есть ссылка на subView, зачем искать ее снова? Почему не сразу:

self.subView.hidden = YES;
[self.subView endEditing:YES];
[self.subView removeFromSuperview];

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...