在iPad上拆分视图,建议?

时间:2014-01-06 14:48:49

标签: ios objective-c ipad storyboard uisplitviewcontroller

我是开发者在iPad上的首发,我想做一个拆分视图。 我有一个左侧菜单(如标签栏但垂直位于左侧),标题(所有视图已经相同)和屏幕中央的容器以及一些数据......

我正在使用故事板(也是初学者)。

应用程序的结构看起来像一个网页。在故事板中,我使用了3个容器:

    我的左侧菜单
  • 1
  • 1 for my header
  • 1为我的主要容器。

问题是:如何使用与我的项目菜单对应的数据刷新主容器?

示例:

  • 菜单=>项目1上的tapp =>显示来自Item1ViewController的数据 主要容器
  • 菜单=>在Item2上的tapp =>显示来自Item2ViewController的数据 主要容器
  • 菜单=>项目3上的tapp =>显示来自Item3ViewController的数据 主要容器

...

你知道我的意思吗?这是我的故事板结构:

enter image description here

谢谢大家的建议和解释,我实际上真的输了。

更新1:

我试过,但我知道一些我知道的问题: 首先,这是我的AppDelegate方法didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    self.mainViewController = [[MainContainerViewController alloc] init]; // MainContainer which can be refreshed with some other viewControllers...

    self.dashboardController = [[DashboardViewController alloc] init]; // The first viewController to load in the mainViewController

    [self setDetailViewController:self.dashboardController]; // Method to set the viewController I want to load in the mainViewController

    [self setup];

    return YES;
}

设置de viewController的方法:

- (void)setDetailViewController:(id)controller
{
    self.mainViewController = controller;
}

我在我的故事板中设置了一个viewController,它是一个MainViewController类(主容器...)和一个viewController,它是一个DashboardViewController类。 当app启动时,我的DashboardViewController的viewDidLoad方法没有被调用,只有init方法,为什么?

这是我的故事板的样子:

enter image description here

谢谢你的帮助! ;)

1 个答案:

答案 0 :(得分:0)

  1. 您在app delegate file
  2. 中创建了side menuViewController和mainViewController
  3. 在menuViewController文件中,您当然会包含您的表格 所有菜单项,选中后将调用一个类似于此的方法

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSString *methodToCall  = [[[[self.menuTitles objectAtIndex:indexPath.section] valueForKey:@"RowTitles"] objectAtIndex:indexPath.row] valueForKey:@"method"];
        if([methodToCall length] > 0){
            SEL s = NSSelectorFromString(methodToCall);
            [self performSelector:s];
        }
    }
    
  4. 我刚将所有菜单标题及其方法名称存储在NSMutableDictionary中,并调用其相应的选择器。或者你可以做一个简单的if else语句,

    if(indexPath.row == 0){ 
        [self loadNewScreenOnMainController];
    }
    

    在那个选择器中我做了这样的事情:

    -(void)loadNewScreenOnMainController{
        ProductsVC *productsVC = [[ProductsVC alloc] init];
        UINavigationController *productsNav = [[UINavigationController alloc] initWithRootViewController:productsVC];
        [[AppDelegate appDelegate] setDetailViewController:productsNav];
    }
    

    }

    我们的想法是在你的app委托中调用一个方法,该方法将从侧面菜单视图控制器切换带有视图控制器的mainViewcontroller

    然后在你的`appDelegate.m文件中你将得到一个如下所示的方法:

    -(void)setDetailViewController:(id)newController{
        mainViewController = newController;
    }
    

    查看Matt gemmett's splitviewcontroller example,他使用相同的方法将一个新的视图控制器从sidemenuViewcontroller切换到主视图控制器