UItabBar, изменяющий View Controllers - PullRequest
6 голосов
/ 16 января 2012

У меня есть некоторые трудности при смене контроллеров панели вкладок. В основном у меня есть UITabBarController с 3 контроллерами. Первый раз, когда приложение запускается. Я меняю один контроллер следующим образом:

NSMutableArray *muteArray = [[NSMutableArray alloc] init];
FirstPage *online;

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{

    online =[[FirstPage alloc] initWithNibName:nil bundle:nil];


}else{

    online =[[FirstPage alloc] initWithNibName:nil bundle:nil];
}

//adding all controllers of tab bar to array
[muteArray addObjectsFromArray:_navigationCotroller.viewControllers];
online.tabBarControllers = [muteArray copy];
//replacing object of login controller to after login controller
[muteArray replaceObjectAtIndex:1 withObject:online];


[online release];

//setting new controllers to tab bar
[_navigationCotroller setViewControllers:muteArray animated:YES];

[muteArray release];

Затем в контроллере FirstPage я делаю некоторые изменения и нажимаю ОК. Теперь мне нужно снова сменить контроллер, сделав это:

NSLog(@"Before change Tab Bar cotrollers = %@",self.tabBarController.viewControllers);

[self.tabBarController setViewControllers:_tabBarControllers animated:YES];

NSLog(@"After change Tab Bar cotrollers = %@",self.tabBarController.viewControllers);

[self.tabBarController.tabBarController setSelectedIndex:1];

_tabBarControllers - это массив контроллеров, которые я сохранил при запуске приложения.

Этот код изменяет контроллеры, но когда я хочу открыть измененный контроллер с помощью setSelectedIndex, он не работает.

Есть идеи?

И напечатать это:

До изменения Tab Bar cotrollers = NULL После изменения Tab Bar cotrollers = NULL

1 Ответ

11 голосов
/ 16 января 2012

Сначала я предполагаю, что вы имели в виду:

[self.tabBarController setSelectedIndex:1];

Если это не похоже на проблему с вашими _tabBarControllers.

что означает следующий вывод:

NSLog(@" _tabBarControllers count = %d", [_tabBarControllers count]);
NSArray* newArray = [NSArray arrayWithArray:self.tabBarController.viewControllers];
NSLog(@" newArray count = %d", [newArray count]);

EDIT: Успешно ли удаляет первую вкладку следующее без проблем?

NSMutableArray* newArray = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers];
[newArray removeObjectAtIndex:0]; 
[self.tabBarController setViewControllers:newArray animated:YES];

РЕДАКТИРОВАТЬ 2:

попробуйте изменить:

[muteArray addObjectsFromArray:_navigationCotroller.viewControllers];
online.tabBarControllers = [muteArray copy];
[muteArray replaceObjectAtIndex:1 withObject:online];

до:

[muteArray addObjectsFromArray:self.tabBarController.viewControllers];
[muteArray replaceObjectAtIndex:1 withObject:online];
online.tabBarControllers = [muteArray copy];

Если честно, мне сложно следить за структурой вашего приложения и ссылками на объекты.

...