Как получить доступ к superview из другого класса? - PullRequest
0 голосов
/ 09 августа 2011

Итак, у меня есть приложение, в котором я реализую универсальную панель инструментов, которая работает как панель вкладок + панель инструментов и присутствует на всех моих контроллерах представления. У меня есть пользовательская панель инструментов, в которой есть несколько кнопок, которые управляют некоторыми контроллерами навигационного представления, которые я создал в App Delegate. Однако у меня возникают проблемы при работе этих кнопок, ниже приведен пример метода действия для одной из кнопок, которые я использую:

    Test_ClassAppDelegate *test_ClassAppDelegate = (Test_ClassAppDelegate*)[[UIApplication sharedApplication] delegate];
[[[test_ClassAppDelegate window] superview] removeFromSuperview];
[[test_ClassAppDelegate window] addSubview:[[test_ClassAppDelegate helpNavController]view]];
[test_ClassAppDelegate release];    

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

1 Ответ

0 голосов
/ 10 августа 2011

Да, эта строка, безусловно, является проблемой ...

Из ссылки UIWindow :

Окно является корневым представлением в иерархии представлений..

Таким образом, у окна нет superview, и вы просите window superview удалить себя из его superview.Это не работает по той же причине, по которой он такой скороговорка - просто не имеет смысла.

Более того, -removeFromSuperview не удаляет суперпредставление, оно удаляетпредставление, на которое вы отправляете -removeFromSuperview из его суперпредставления. Видите ли вы разницу?

Похоже, вы хотите изменитьконтроллер корневого представления на основе выбора пользователя.Если это так, см. Мой ответ на этот вопрос и множество других на SO.

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