Я разработал приложение для iPhone, и теперь я хотел бы реализовать UISplitViewController, который будет запускаться при запуске, если приложение запускается на iPad.
Чтобы начать работу разделенного вида, я скопировал большую часть кода из проекта MultipleDetailViews от Apple.
У меня есть несколько вопросов, если можно:
- 1) Можно ли повторно использовать классы, которые я создал для приложения iPhone, для отображения в качестве «подробного» представления контроллера разделенного представления?
- 2) У меня контроллер загрузки разделенного вида программно, но маленькая кнопка для отображения всплывающего окна не появляется. Я пробовал много способов и отладил, и код, который запускается для представления кнопки popover, работает, но ничего не происходит. Есть идеи?
- 3) Я создал .xib, который правильно подключен с помощью контроллера splitview. Можно ли получить эту XIB для загрузки при запуске вместо программного создания splitviewcontroller?
При запуске - это код, который я сейчас использую:
// manually create a split view controller
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
// launch the ipad view
RootViewControllerPad *firstVC = [[[RootViewControllerPad alloc]
initWithNibName:nil bundle:nil] autorelease];
IndicatorsPad* secondVC = [[[IndicatorsPad alloc]
initWithNibName:@"IndicatorsPad" bundle:nil] autorelease];
splitViewCtrl = [[UISplitViewController alloc] init];
splitViewCtrl.viewControllers = [NSArray arrayWithObjects:firstVC, secondVC, nil];
self.window.rootViewController = self.splitViewCtrl;
[window addSubview:splitViewCtrl.view];
}
Контейнеры с разделенным видом отображаются, но, как я уже сказал, они не работают должным образом. Он должен автоматически представлять кнопку для всплывающего окна, когда ориентация меняется на портретную, и он этого не делает.
Когда я выбираю один из элементов в левом меню, он не отображает требуемый символ xib в подробном представлении, даже если код (вероятно) правильный:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
/*
Create and configure a new detail view controller appropriate for the selection.
*/
NSUInteger row = indexPath.row;
NSLog(@"Row %i selected",row);
UIViewController <SubstitutableDetailViewController> *detailViewController = nil;
if (row == 5) {
IndicatorsPad *newDetailViewController = [[IndicatorsPad alloc] initWithNibName:@"IndicatorsPad" bundle:nil];
detailViewController = newDetailViewController;
}
if (row == 6) {
SensPad *newDetailViewController = [[SensPad alloc] initWithNibName:@"SensPad" bundle:nil];
detailViewController = newDetailViewController;
}
// Update the split view controller's view controllers array.
NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil];
splitViewController.viewControllers = viewControllers;
[viewControllers release];
// Dismiss the popover if it's present.
if (popoverController != nil) {
[popoverController dismissPopoverAnimated:YES];
}
// Configure the new view controller's popover button (after the view has been displayed and its toolbar/navigation bar has been created).
if (rootPopoverButtonItem != nil) {
[detailViewController showRootPopoverButtonItem:self.rootPopoverButtonItem];
}
[detailViewController release];
}
Я потратил пару дней на эти проблемы и действительно буду признателен за руководство. Я прочитал несколько вопросов и ответов на этом форуме и дошел до того, что я чувствую, что мне нужно задать эти конкретные вопросы.
Большое спасибо.