#objective-c #ios #xcode #ios5
#objective-c #iOS #xcode #ios5
Вопрос:
В моем приложении, которое отлично работает на iOS 4, панель навигации исчезла, начиная с iOS 5. Вот что, как я понял, вызвало проблему: я удалял вложенные представления в методе RootViewController viewWillAppear:
for(UIView* view in self.navigationController.navigationBar.subviews)
{
if ([view isKindOfClass:[UILabel class]])
{
[view removeFromSuperview];
}
if([view isKindOfClass:[UIImageView class]])
{
[view removeFromSuperview];
}
}
Я делал это потому, что второй контроллер просмотра, который я нажимаю на навигационный контроллер, добавляет изображение и метку на панель навигации, которые я должен удалить при появлении просмотра. В iOS 5 приведенный выше код удаляет панель навигации. Как это исправить или как правильно это сделать, чтобы поддерживать как iOS4, так и iOS 5?
Ответ №1:
Установка тегов для этих изображений и uilabel, а затем удаление их из кода выше, сделали свое дело.
for(UIView* view in self.navigationController.navigationBar.subviews)
{
if(view.tag == 9 || view.tag == 99)
{
[view removeFromSuperview];
}
}
Комментарии:
1. Да, технически это будет работать, но ваш код станет значительно менее понятным, если вам или кому-то еще понадобится вернуться к нему позже. Вы рискуете не иметь возможности эффективно читать и отслеживать, что делает ваш код. По крайней мере, сделайте эти теги константами, чтобы было видно, что вы удаляете.
2. Вы могли бы просто удалить вложенный просмотр, используя приведенный ниже код [(UILabel *)[self.NavigationController.NavigationBar viewWithTag:yourViewTag] removeFromSuperview];
Ответ №2:
Вы могли бы сделать добавленные вами представления подклассами их соответствующих классов UIKit и проверить эти конкретные подклассы. На самом деле, чтобы иметь самый четкий и читаемый код, вам следует подклассировать навигационный контроллер и панель навигации, чтобы можно было отображать пользовательское изображение и метку таким образом, чтобы вы могли просто установить фоновое изображение и метку переднего плана равными нулю. Для объединения потребуется немного времени, но конечный результат будет намного более расширяемым.