【问题标题】:iOS storyboard passing data navigationViewControlleriOS故事板传递数据navigationViewController
【发布时间】:2012-01-15 18:39:17
【问题描述】:

我在视图之间正确传递数据时遇到问题,但不是以标准方式。

描述我的问题的图片:

我使用两个 segue 标识符之一执行SegueWithIdentifier,然后我想将数据传递给名为“Firmy”或“Oddzialy”的 ViewController。

传递数据代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  if ([[segue identifier] isEqualToString:@"sLogowanieFirmy"]) {
      FirmyVC *firmyVC = [segue destinationViewController];
      firmyVC.tabFirmy = self.tabFirmy;
  }
  if ([[segue identifier] isEqualToString:@"sLogowanieOddzialy"]) {
      OddzialyVC *oddzialyVC = [segue destinationViewController];
      oddzialyVC.wybranaFirma = [self.tabFirmy objectAtIndex:0];
  }
}

问题在于方法 [segue destinationViewController] 因为 segue 的 destinationViewController 是 NavigationViewController。

那么传递数据并拥有独立导航控制器的正确方法是什么?

【问题讨论】:

标签: ios objective-c cocoa-touch storyboard navigationcontroller


【解决方案1】:

UINavigationController 有一个名为topViewController 的属性,它返回位于堆栈顶部的视图控制器。

所以你的prepareForSegue: 方法可能看起来像这样......

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"sLogowanieFirmy"]) {
        UINavigationController *nav = [segue destinationViewController];
        FirmyVC *firmyVC = (FirmyVC *)nav.topViewController;
        firmyVC.tabFirmy = self.tabFirmy;
    }

    // etc...
}

【讨论】:

  • 这正是我想要的。谢谢!你节省了我的时间。
【解决方案2】:

这里很快:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{    
    if (segue.identifier == "sLogowanieFirmy") {
        let nav = segue.destinationViewController as! UINavigationController 
        let firmyVC = nav.topViewController as! FirmyVC
        firmyVC.tabFirmy = self.tabFirmy            
    }

    // etc...
}

【讨论】:

    猜你喜欢
    • 2012-03-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2012-10-11
    • 2013-05-10
    • 2018-11-20
    相关资源
    最近更新 更多