Как удалить последнюю вкладку из uitabbarcontroller, если у вас всего три вкладки

Здесь я пытаюсь динамически добавлять и удалять вкладку из uitabbarcontroller.

Как и заменить их. Ситуация с моими приложениями приведена ниже.

Первое представление - Вход в систему и о

После успешного входа в систему появятся новые 3 вкладки. С последним как Море и двумя другими.

В дополнительных параметрах выхода из системы после выбора этого я хочу удалить последнюю вкладку и

замените первые два на снова logon и About. т.е. (Домашний вид)

Итак, в моем коде я делаю вот так ........

///AppDelegate.m

  • (BOOL) application: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions {

    // Точка переопределения для настройки после запуска приложения.

    self.window.rootViewController = tabBarCntr; tabBarCntr = [[UITabBarController alloc] инициализация]; LogonViewController * logon = [[LogonViewController alloc] инициализация]; logon.tabBarItem.title = @ "Вход в систему"; AboutViewController * about = [[Размещение AboutViewController] инициализация]; about.tabBarItem.title = @ "О"; tabBarCntr.viewControllers = [NSArray arrayWithObjects: sos1, about, nil]; [разрешение входа]; [о выпуске];

    [self.window addSubview: tabBarCntr.view];

    [self.window makeKeyAndVisible]; }

и в моем IBAction после успешного входа в систему установка новых контроллеров просмотра на tabbarcontroller

self.tabBarController.viewControllers = [NSArray

arrayWithObjects: newController1, newController2, more, nil];

    Now in my loggoff i coding something like.....
       NSMutableArray *newArray;   
     newArray=[NSMutableArray arrayWithArray:self.tabBarController.viewControllers];
       [newArray replaceObjectAtIndex:0 withObject:logon];
       [newArray replaceObjectAtIndex:1 withObject:about];
       [newArray removeLastObject];
       self.tabBarController.selectedIndex=0;
       [self.tabBarController setViewControllers : newArray];


  but my applcation crash here after this ....
 can any has solution for this ...

Спасибо заранее.

Паггыыыы

Изменить: NSMutableArray arrayWithArray добавил пространство для исправления кода


person user968597    schedule 10.01.2012    source источник


Ответы (2)


На мой взгляд, вы используете 2 отдельных tabBarController. один для входа в систему, а другой для приложения. после входа в систему удалите и отпустите вкладку входа в систему и добавьте вкладку приложения. И снова после выхода удалите и отпустите вкладку приложения и добавьте вкладку входа в систему. Это упростит доступ к вкладкам вместо удаления / добавления контроллеров просмотра, переименования вкладок, изменения изображений вкладок.

person vishy    schedule 10.01.2012
comment
спасибо, но как я могу использовать два отдельных tabbarcontroller, когда я добавил первый как subview в окно - person user968597; 10.01.2012
comment
сделайте 2 экземпляра контроллера панели вкладок в appDelegate, и здесь вы можете написать метод, который нужно добавить в окно. вы можете сохранить панель вкладок в этом методе. - person vishy; 10.01.2012
comment
@vishy большое спасибо, что ваше предложение тоже сработало для меня. Я до сих пор удивляюсь, почему не подумал об этом простом решении. - person pankaj; 12.03.2013

Вы можете изменить контроллер панели вкладок с помощью свойства setViewControllers: animated: YES. Вы можете назначить там новый массив. Соответственно переключается.

[tabBarController setViewControllers: анимированный массив: ДА];

Есть одна важная ошибка. Я использую ручной подсчет ссылок, однако я использовал опцию автоматического выпуска для контроллеров представления, назначенных этому массиву, поскольку я использовал шаблон Xcode в качестве основы приложения. Тогда они сохраняются только в этом массиве. Если вы забыли сохранить все контроллеры представления, которые могут появляться в разных массивах вкладок во время жизненного цикла приложения, после изменения, во время изменения или даже инициализации массива возникает любопытный сбой памяти. Поэтому необходимо сохранить ссылки на эти контроллеры представления /

person David Vít    schedule 16.04.2012