4

Я использую UISplitViewController для приложения на iPad. Первой задачей было показать основной и подробный вид в портретном режиме. Я сделал это так:UISplitView - загрузить различные detailView для каждой строки в masterView

// It is possible to keep the Master View in portrait mode 
// also. Just pass YES to this method to enable this mode. 
- (id) initWithMasterInPortraitMode:(BOOL) masterInPortrait { 
    self = [super init]; 
    self.keepMasterInPortraitMode = masterInPortrait; 
    return self; 
} 

// Thanks to http://intensedebate.com/profiles/fgrios for this code snippet 
-(void) viewWillAppear:(BOOL)animated { 
    NSLog(@"viewWillAppear"); 
    if(keepMasterInPortraitMode == NO) { 
     return; 
    } 

    //check interface orientation at first view and adjust it 
    //if it is in portrait mode 
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait || self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { 
     UIViewController* master = [self.viewControllers objectAtIndex:0]; 
     UIViewController* detail = [self.viewControllers objectAtIndex:1]; 
     [self setupPortraitMode:master detail:detail]; 
    } 
} 

// Thanks to http://intensedebate.com/profiles/fgrios for this code snippet 
- (void)setupPortraitMode:(UIViewController*)master detail:(UIViewController*)detail { 
    //adjust master view 
    CGRect f = master.view.frame; 
    f.size.width = 320; 
    f.size.height = 1024; 
    f.origin.x = 0; 
    f.origin.y = 0; 

    [master.view setFrame:f]; 

    //adjust detail view 
    f = detail.view.frame; 
    f.size.width = 448; 
    f.size.height = 1024; 
    f.origin.x = 321; 
    f.origin.y = 0; 

    [detail.view setFrame:f]; 
} 

Я создаю SplitView так:

MySplitViewController *mySplitViewController = [[MySplitViewController alloc] initWithMasterInPortraitMode:YES]; 

Хорошо, что хорошо работает, и когда я запускаю приложение в портретном режиме он показывает как мастер и детали вид сбоку устройства на стороне ,

Все работает на данный момент. Но я хочу показать другое представление в detailView для каждой записи (строки) в главном представлении. Мой метод didSelectRowAtIndexPath в MasterView выглядит следующим образом:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.row == 0) { 
     FirstDetailViewController *firstDetailView = [[FirstDetailViewController alloc] initWithNibName:@"firstDetailView" bundle:nil]; 
     UINavigationController *firstDetailNavigationController = [[UINavigationController alloc] initWithRootViewController:firstDetailView]; 
     [firstDetailView release]; 

     [self.splitViewController setViewControllers:[NSArray arrayWithObjects:self.navigationController, firstDetailNavigationController, nil]]; 
    } 
    else { 
     SecondDetailViewController *secondDetailView = [[SecondDetailViewController alloc] initWithNibName:@"secondDetailView" bundle:nil]; 
     UINavigationController *secondDetailNavigationController = [[UINavigationController alloc] initWithRootViewController:secondDetailView]; 
     [secondDetailView release]; 

     [self.splitViewController setViewControllers:[NSArray arrayWithObjects:self.navigationController, secondDetailNavigationController, nil]]; 
    } 
} 

После щелчка (касания) на первом или втором ряду (в MasterView) SplitView показывает только DetailView (весь экран), без MasterView.

Как я могу заставить splitView отображать при изменении обоих представлений, главного и подробного представления ???

Благодарим за помощь!

+0

Я нашел пример из iPhone Developer Center - MultipleDetailsView, но я не понимаю, протоколы: https://developer.apple.com/iphone/library/samplecode/MultipleDetailViews/Introduction/Intro.html Кто-нибудь знает как это реализовать? –

ответ

0

Я нашел решение. В MasterView я создал экземпляр splitViewController и назначить локальный экземпляр этого экземпляр:

settingsSplitViewController = (SettingsSplitViewController *)self.splitViewController; 

В методе didSelectRowAtIndexPath я сделал это так:

[settingsSplitViewController setupPortraitMode:self.navigationController detail:detailNavigationController]; 

Надеется, что это поможет кому-то еще, чтобы решить такого рода проблемы.

Смежные вопросы