【问题标题】:Identify which Storyboard is active确定哪个 Storyboard 处于活动状态
【发布时间】:2019-12-22 22:35:13
【问题描述】:

我需要弄清楚如何识别在任何给定时间处于活动状态的情节提要。我有一个专门的天赋,我需要识别情节提要(UIView),然后根据用户按下的内容以编程方式更改内容。

  1. 所有情节提要都有标识符。
  2. 在根视图的 viewDidLoad 中有以下内容。
- (void)viewDidLoad
 self.topViewController = 
    [storyboard instantiateViewControllerWithIdentifier:@"View1"];
{

我想做的是确定用户在哪个情节提要上,并根据媒体执行以下 sudo-code

- (void)viewDidLoad
if (storyboard.name != RootView)
   self.topViewController = 
    [storyboard instantiateViewControllerWithIdentifier:@"View1"];
{
else if (storyboard.name = View2){
   self.topViewController = 
    [storyboard instantiateViewControllerWithIdentifier:@"View2"];
}

等等……

我已经逐步浏览了代码并看到了 StoryboardID,但我很确定你不会使用它......

提前致谢 杰里米

更新:导航说明

我正在尝试实现ECSlideViewController,但它正在使我陷入困境。有效地将幻灯片添加到正确的功能以显示更多选项。所以,这种想法很容易被证明是恶心的。我有主 UIViewController<title:HomeView> 然后我在屏幕上有 4 个按钮,它们连接到其他 UIViewControllers<View1>、UIViewController<View2> 等。

为了在 View1、View2、View3、View4 上产生效果,我需要将类(如示例中的 ECSlideViewController)带入 UIViewController<HomeView>。但是,如果我更改下面的代码来表示这个......

self.topViewController = 
    [storyboard instantiateViewControllerWithIdentifier:@"HomeView"]; 

它崩溃是因为它调用了自己。不好,循环编码是不行的。

但是如果我把它设置为原来的样子

self.topViewController = 
    [storyboard instantiateViewControllerWithIdentifier:@"FirstTop"];

(顺便说一句,firstTop 是示例中使用的视图的标题)

它有效,但随后忽略了UIViewController<HomeView>

这就是为什么我问是否有办法识别UIViewController 的self.title(说故事板...我的错),因为我打算在它周围放置条件逻辑以便不放置代码如果它在UIViewController<HomeView> 上。

除非您下载ECSlideViewController 并开始使用它,否则这真的很难解释。但实际上我只想测试 self.title .....我认为...

另一个想法是将逻辑带入四个中的UIViewControllers 并让它在那里工作......但是它通过 nil 吓坏了,因为它期待一个标识符......

希望这是有道理的......

J.

【问题讨论】:

  • 我认为您对故事板是什么感到困惑。故事板没有标识符,视图控制器和 segues 有。当你制作一个应用程序时,你会自动获得一个故事板,其文件名为 MainStoryboard.storyboard。您是否在您的应用中添加了任何其他故事板,或者您在谈论视图控制器?
  • 对不起我的错...是的...我的意思是视图控制器。
  • 实际上,我只需要获取 UIView 的标题...但是对于我的一生来说,当我使用 self.title 时,它​​会生成代表标题的数字。
  • 你是指 UIView 还是 UIViewController?您为什么不描述您需要的“专业”导航,并且有人可能会帮助您使用情节提要功能更轻松地做到这一点。
  • 你的权利Firoze....更新解释。

标签: ios storyboard


【解决方案1】:

好吧,伙计们,

完全放弃了 ECSlideViewController。我发现一些文章解释了当您有多个 UiViewController 无法正确传递数据时会出现问题。我最终使用了安德鲁斯的建议。 http://www.youtube.com/feed/UCJA_puohXgnze8gPaerTeig 它对我来说更容易。

虽然我注意到 Apple 的设计指南,这通常是不可以的,但我希望他们不会介意。

再次感谢大家!

J。

【讨论】:

    【解决方案2】:

    我不确定这是否有帮助,但听起来您必须比较实例才能获得所需的结果。我没有尝试过,但我会在您的应用程序委托中创建每个故事板的属性,然后在您的视图控制器中引用应用程序委托进行比较。这可能不是最好的编码实践,但我会把它交给你。

    类似(未经测试的代码):

    - (void)testStoryBoard //After awake from nib or viewDidLoad
     {
        NXAppDelegate *appDelegate = (NXAppDelegate *)[[UIApplication sharedApplication] delegate];
        if ([self.storyBoard isEqual:appDelegate.view1StoryBoard]) 
             NSLog(@"View1 Storyboard");
        else 
             NSLog(@"View 2 Storyboard");
     }
    

    【讨论】:

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