【问题标题】:Passing data into Container View using Embed Segue使用 Embed Segue 将数据传递到容器视图
【发布时间】:2013-03-29 05:07:04
【问题描述】:

所以我已经看过大部分教程(并且正在使用该技术)在 segue 是推送时(在 prepareForSegue 方法中)将数据从一个视图控制器传递到下一个视图控制器。我可以将destinationViewController 转换为我的自定义类并将数据推送到自定义属性中。

但是,当我尝试为 Embed Segue(iOS6 中允许容器视图工作的新版本)执行此操作时,destinationViewController 似乎不正确;它只是一个 UIViewController,而不是我在故事板中定义的自定义类。

如您所见,我的主表格视图包含开始日期和结束日期。然后我有一个使用容器视图嵌入的子视图。这有一个用于命令日期的工具栏 + 一个 UIDatePicker。

我的问题是我需要主表视图控制器具有来自日期选择器的事件侦听器(UIControlEventValueChanged 之一,用于更新标签)。父控制器看不到日期选择器。两个视图控制器都实现了自定义类。 Date Picker 控制器类将日期选择器作为 IBOutlet 对象,并且 3 个日期范围按钮具有选择的方法来更改日期。

看来我的问题是两个视图控制器之间的上下文。

仅供参考:我需要将它们分开,以便切换日期选择器小部件和工具栏的可见性。

更新 1:

我找到了一种解决方法,它在父级的准备序列中,将“自我”引用传递给具有父视图控制器类型属性的子级。这为孩子提供了对其父母的正确引用,然后我可以执行以下操作:

-(void) viewDidLoad {
    [[self datePicker] addTarget:[self graphSettingsViewController] action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
}

这可行,但感觉“混乱”。有什么想法吗?

【问题讨论】:

    标签: ios6 storyboard uitableview uidatepicker uistoryboardsegue


    【解决方案1】:

    我在从 ViewController Container 到包含的 VC 的 Embed segue 中遇到了同样的问题。

    我开始怀疑 Apple 存在错误,或者在这种情况下,segue 上可能存在另一个属性(例如可能是 embeddedVC 而不是destinationVC)。但是……

    我终于发现,特定的 source 视图控制器(在故事板中)以某种方式更改为股票 UIViewController 并且不知何故把事情搞砸了。不知道这是怎么发生的,但是一旦我解决了这个问题,事情又开始工作了。

    希望这会有所帮助...

    【讨论】:

      【解决方案2】:

      使用 Embed Segue 将数据传递到容器视图

      #pragma mark - Navigation
      
      // In a storyboard-based application, you will often want to do a little preparation before navigation
      - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
          NSString * segueName = segue.identifier;
      
          if ([segueName isEqualToString: @"toMenuCategory"]) {
              MenuCategoryVC * childViewController = (MenuCategoryVC *) [segue destinationViewController];
              childViewController.activityList = self.menuCategoryList;
              childViewController.setCategoryInfo= ^ (NSDictionary *dictCategoryInfo){
      
                  NSLog(@"dictCategoryInfo = %@" ,  dictCategoryInfo);
      
              };
      
      
      
          }
      }
      

      MenuCategoryVC.h

      #import <UIKit/UIKit.h>
      
      @interface MenuCategoryVC : UIViewController
      
      @property (nonatomic,strong) NSMutableArray* activityList;
      @property (nonatomic, copy) void (^setCategoryInfo)(NSDictionary *dictCategoryInfo);
      

      MenuCategoryVC.m

      // MARK: -
      // MARK: - BUTTON NEXT ACTION
      
      - (IBAction)actionNext:(id)sender {
          self.setCategoryInfo(categoriesData);
      
      }
      

      【讨论】:

        【解决方案3】:

        使用委托模式。在 prepareForSegue 中为嵌入标识符设置 controller.delegate = self。然后在子控制器的ibaction方法中调用[self.delegate catgegoryChanged]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多