代码之家  ›  专栏  ›  技术社区  ›  Borut Tomazin

UISplitView-为masterView中的每一行加载不同的detailView

  •  4
  • Borut Tomazin  · 技术社区  · 14 年前

    我正在iPad上使用UISplitViewController for app。第一个任务是在纵向模式下显示主视图和局部视图。我是这样做的:

    // 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中为主视图中的每个记录(行)显示不同的视图。 我在masterView中的didSelectRowatingIndexPath方法如下所示:

    - (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在更改主视图和详细视图时显示???

    谢谢你的帮助!

    1 回复  |  直到 14 年前
        1
  •  0
  •   Borut Tomazin    14 年前

    我找到了解决办法。在masterView中,我创建了splitViewController实例,并将本地实例分配给该实例:

    settingsSplitViewController = (SettingsSplitViewController *)self.splitViewController;
    

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

    希望它能帮助别人解决这种问题。