【问题标题】:How to use storyboards on the iPad, with a split-view controller (iOS5.0)?如何在 iPad 上使用带有拆分视图控制器 (iOS5.0) 的故事板?
【发布时间】:2011-12-11 09:24:55
【问题描述】:

我找不到合适的示例,当用户在主视图中选择某些内容时,我应该如何在详细视图中呈现新视图?

【问题讨论】:

    标签: ios ipad ios5 storyboard


    【解决方案1】:

    也没有找到任何东西。可行的解决方案是继续为每个视图(或至少复杂的视图)制作故事板,并让 appDelegate 类包含它们。我真的很惊讶故事板 ide 不允许添加子视图...如果还没有的话,可能会在下一次更新中。

    【讨论】:

      【解决方案2】:

      Matthijs Hollemans 的书"ios5 by tutorials" 包括如何在 ipad 上使用故事板。但是那本书需要购买,机器人免费。我只是想找到示例代码,但失败了。

      【讨论】:

      • 是的,我看到那本书包含示例,但是为(希望)简单示例买一本书有点傻......
      • 您可以为代理创建协议。委托用于将数据从 MasterViewController 发送到您的 DetailViewController。
      【解决方案3】:

      您可以按照以下方式进行操作。

      1. 创建一个新协议作为委托 MyDataDelegate.h。
      
      @protocol MyDataDelegate
      - (void)sendDataToView:(MyData *)data;
      @end
      

      【讨论】:

        【解决方案4】:
        1. 在您的 DetailViewController.h 文件中。
        
        
            @interface DetailViewController : UIViewController 
        
        
        1. 在您的 DetailViewController.m 文件中。
        
        
            - (void)sendDataToView:(MyData *)data
            {
                // your code how to display data.
            }
        
        

        【讨论】:

          【解决方案5】:

          使用 Xcode 4 创建主从应用程序项目模板。转到情节提要文件,展开主视图并通过选择名为“Detail”的默认静态单元格并按 Cmd + D 添加另一个静态单元格。将新的静态单元格命名为“Hello”(或任何您喜欢的名称。) 现在在你的 MasterViewController.m 文件中,实现这个:

          - (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
          {
              [self.detailViewController setDetailItem:[[[tableView cellForRowAtIndexPath:indexPath] textLabel] text]];
          }
          

          本示例将在 detailViewController 中的默认标签设置为 masterViewController 的选定单元格名称。 注意 setDetailItem: 方法接受一个 id 参数,在这个例子中你传递一个 NSString *。

          【讨论】:

            【解决方案6】:
            1. MasterViewController.h
            
            
                @property (assign,nonatomic) id delegate;
            
            
            1. MasterViewController.m
            
            
                - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
                {
                    if (delegate!=nil) {
                        // get your data here   { your code here } 
                        [delegate sendDataToView:data];
                    }
                }
            
            
            1. 在您的 AppDelegate.m 文件中。
            
            
                - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
                {
                    // Override point for customization after application launch.
                    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
                    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
                    splitViewController.delegate = (id)navigationController.topViewController;
            
            
                    // set the view controller here
                    UINavigationController *masterNavController = [splitViewController.viewControllers objectAtIndex:0];
                    MasterViewController *masterViewController = [masterNavController.viewControllers objectAtIndex:0];
                    UINavigationController *detailNavController = [splitViewController.viewControllers objectAtIndex:1];
                    DetailViewController *detailViewController = [detailNavController.viewControllers objectAtIndex:0];
                    masterViewController.delegate = detailViewController;
            
                    return YES;
                }
            
            

            【讨论】:

            • 这与在情节提要中设置拆分视图控制器有什么关系?
            猜你喜欢
            • 1970-01-01
            • 2016-11-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-05
            相关资源
            最近更新 更多