【问题标题】:Split view on iPad, suggestions?iPad上的拆分视图,建议?
【发布时间】:2014-01-24 00:10:14
【问题描述】:

我是 iPad 上的开发新手,我想制作一个拆分视图。 我有一个左侧菜单(像一个标签栏,但在左侧是垂直的)、一个标题(对于所有视图已经相同)和一个位于屏幕中心的容器,其中包含一些数据...

我正在使用情节提要(也是入门)。

应用的结构看起来像一个网页。在情节提要中,我使用了 3 个容器:

  • 1 代表我的左侧菜单
  • 1 代表我的标题
  • 1 用于我的主容器。

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

例子:

  • Menu => 点击 Item1 => 显示来自 Item1ViewController 的数据 主容器
  • Menu => 点击 Item2 => 显示来自 Item2ViewController 的数据 主容器
  • Menu => 点击 Item3 => 显示来自 Item3ViewController 的数据 主容器

...

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

谢谢大家的建议和解释,我真的很迷茫。

更新 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方法,为什么?

我的故事板如下所示:

感谢您的帮助! ;)

【问题讨论】:

    标签: ios objective-c ipad storyboard uisplitviewcontroller


    【解决方案1】:
    1. 您在应用委托文件中同时创建侧边 menuViewController 和 mainViewController
    2. 在您的 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];
          }
      }
      

    我刚刚将所有菜单标题及其方法名称存储在 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];
    }
    

    }

    想法是在您的应用委托中调用一个方法,该方法将主视图控制器与侧菜单视图控制器中的视图控制器切换

    然后在您的 `appDelegate.m 文件中,您将拥有如下所示的方法:

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

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

    【讨论】:

    • @Lapinou 我已经为您完成了答案,其中还包括将 wat 放入您的应用程序委托中的想法,该委托将负责您的最终主控制器切换。
    • 嗨,帕万!感谢您的帮助;)我尝试使用您的想法,但遇到一些问题。如果您想查看我的问题,我已经更新了我的帖子。非常感谢;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    相关资源
    最近更新 更多