iOS - все еще возможно динамически добавлять элементы в UITabBarController в этом веке адаптивного макета? - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть приложение, которое общается с внешними объектами.Мне нужно либо показать, либо скрыть элемент на панели вкладок, если у этой сущности переключатель включен или выключен.

Он должен быть динамическим в случае, если пользователь переходит от сущности A к сущности B и у них разныенастройки.Элемент панели вкладок должен отображаться / скрываться, если они переключаются, а настройки различаются.

Я использовал для добавления элемента в UITabBarController вот так:

UIViewController *vc1 = [[MyViewController1 alloc] init];
[self.tabBarController addChildViewController:vc1];

UIViewController *vc2 = [[MyViewController2 alloc] init];
[self.tabBarController addChildViewController:vc2];

И я мог бы удалить элементы из вкладкистрока вроде этого:

    NSMutableArray *tbViewControllers = [NSMutableArray arrayWithArray:[self.tabBarController viewControllers]];
    [tbViewControllers removeObjectAtIndex:4];
    [tbViewControllers removeObjectAtIndex:4];
    [self.tabBarController setViewControllers:tbViewControllers];

В моем коде ViewController у меня было что-то вроде этого:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization

        //get the tab bar item
        UITabBarItem *tbi = [self tabBarItem];

        //give it a label
        [tbi setTitle:@"Tab Item"];

        //create a UIImage from a file
        UIImage *i = [UIImage imageNamed:@"image.png"];

        //put that image on the tab bar item
        [tbi setImage:i];
    }
    return self;
}

Теперь, с появлением адаптивного макета приложения и переходов, кажется, что добавление элемента динамическине работает.По крайней мере, для меня.

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

Мое приложение полностью адаптивно, совместимо с UIStackViews и еще чем-то подобным.

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

Можно ли еще добавлять / удалять элементы вкладок из панели вкладок?Целесообразно ли это делать или это сейчас плохая практика?

Есть ли другие идеи для достижения этой же цели - иметь элемент на панели вкладок или нет, в зависимости от внешних настроек?

Cheers

1027 * TJ

1 Ответ

0 голосов
/ 25 апреля 2018

Я нашел свое собственное решение и делюсь им, чтобы помочь другим.

Хитрость заключалась в том, как был создан UIViewController.

Новый способ сделать это - создать контроллер представления с помощьюсоздание экземпляров из раскадровки.

Я нашел идею из этого вопроса .

Создание и добавление в TabView выполняется следующим образом:

// Get a reference to the Tab View Controllers array
NSMutableArray *tbViewControllers = [NSMutableArray arrayWithArray:[self.tabBarController viewControllers]];

// Get a reference to the storyboard                    
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];

// Instantiate a new instance of the ViewController
UIViewController *vc1 = [sb instantiateViewControllerWithIdentifier:@"MyVC"];

// Add the new view controller to the array at the desired location
[tbViewControllers insertObject:vc1 atIndex:tbViewControllers.count-1];

// Set the tab bar controllers to the newly augmented array
[self.tabBarController setViewControllers:tbViewControllers];

Это оно.Контроллер представления работает так, как я ожидаю.Больше нет черного экрана.

Надеюсь, это поможет кому-то еще.

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