Я натурален из ситуации, что я должен запустить с основанного на вкладке приложения, и в этом мне нужно представление разделения для одной или нескольких вкладок. Но кажется, что объект контроллера представления разделения не может быть добавлен к tabbarController. (Хотя объект панели вкладок может быть добавлен к splitviewcontroller).
Проблема видна otherways: у Меня есть полный экран в левой первой части, имеют табличное представление, когда любая строка выбрана в таблице, легкая сдоба должна выйти, указав на ту строку. Теперь, когда любая строка в легкой сдобе выбрана, строки в этой легкой сдобе прибывают налево под выбранной строкой (только эта строка была бы видима), и другая легкая сдоба прибывает из выбранной строки. (Тип навигации навигационной цепочки)
Я думаю, что я ясен в том, что я объяснил. Так парни какие-либо идеи или работа arounds?
Сообщите мне, не ли я ясен в своем вопросе.
Спасибо,
Madhup
Я сделал пример приложения. и обнаружил, что мы можем сделать это программно, например:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSMutableArray *array = [NSMutableArray array];
NSMutableArray *tabArray = [NSMutableArray array];
UISplitViewController *splitViewConntroller = [[UISplitViewController alloc] init];
MainViewController *viewCont = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
[array addObject:viewCont];
[viewCont release];
viewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
[array addObject:viewCont];
[viewCont release];
[splitViewConntroller setViewControllers:array];
[tabArray addObject:splitViewConntroller];
[splitViewConntroller release];
array = [NSMutableArray array];
splitViewConntroller = [[UISplitViewController alloc] init];
viewCont = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
[array addObject:viewCont];
[viewCont release];
viewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
[array addObject:viewCont];
[viewCont release];
[splitViewConntroller setViewControllers:array];
[tabArray addObject:splitViewConntroller];
[splitViewConntroller release];
// Add the tab bar controller's current view as a subview of the window
[tabBarController setViewControllers:tabArray];
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
return YES;
}
Надеюсь, это поможет.
Чтобы позволить tabbarcontroller отображается как главное представление для splitviewcontroller, вам следует переписать tabbarcontroller так, чтобы он поддерживал или ориентации (скажем, используя категорию для класса UITabBarController)
Используя построитель интерфейса, создайте контроллер разделенного представления и контроллер панели вкладок и свяжите их со своими выходами:
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet UISplitViewController *splitViewController;
В делегате приложения didFinishLaunchingWithOption
назначьте контроллер разделенного представления контроллеру панели вкладок. :
splitViewController.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Title" image:nil tag:0] autorelease];
NSArray *controllers = [NSArray arrayWithObjects:splitViewController, /* other controllers go here */ nil];
tabBarController.viewControllers = controllers;
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
Будет создан контроллер панели вкладок (в данном случае только 1 вкладка), который правильно отображается во всех ориентациях.
См. Мой пост о модернизации контроллеров разделения представления на существующий интерфейс панели вкладок: http://markivsblog.blogspot.com/2010/04/ дооснащение-ipad-uisplitviewcontroller.html
Имейте в виду, что OS 3.2 не обеспечивает надлежащую поддержку для разделения просмотра в качестве представления панели вкладок.
Вы можете заставить его «работать», но в нем будут ошибки - самая большая из них заключается в том, что изменение ориентации, сделанное в представлении другой вкладки, часто не распространяется на представление вкладки Splitview должным образом, из-за чего представление становится дурацким, когда вы возвращаетесь к нему. (вид слева переходит на экран, или элемент барной кнопки отсутствует и т. д.).
Я пришел к выводу, что из-за этой проблемы мне нужно создать собственное splitview для использования в tabBarController.
До меня доходили слухи, что Apple работает над исправлением, но прошли месяцы, а никаких обновлений операционной системы iPad не происходило - возможно, OS 4 для iPad решит эту проблему.
Вы можете использовать IB для создания tabtab и модификации вкладок в splitviewcontroller.
-(void) makeSplitViewController {
NSMutableArray *controllers = [NSMutableArray arrayWithArray:tabBarController.viewControllers];
int index = 0;
for (UIViewController *controller in tabBarController.viewControllers) {
if ([controller.tabBarItem.title isEqualToString:@"Stock"]) {
stockDetailController = [[StockDetailController alloc] initWithNibName:@"StockDetailController" bundle:nil];
stockMasterController = [[StockMasterController alloc] initWithStyle:UITableViewStylePlain];
stockMasterController.navigationItem.title = date;
stockMasterController.stockDetailController = stockDetailController;
UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:stockMasterController] autorelease];
splitViewController = [[UISplitViewController alloc] init];
splitViewController.tabBarItem = controller.tabBarItem;
splitViewController.viewControllers = [NSArray arrayWithObjects:nav, stockDetailController, nil];
splitViewController.delegate = stockDetailController;
[controllers replaceObjectAtIndex:index withObject:splitViewController];
}
index++;
}
tabBarController.viewControllers = controllers;
}