【问题标题】:Supporting two storyboards支持两个故事板
【发布时间】:2013-04-30 21:17:09
【问题描述】:

我有一个带有中等大小故事板的应用程序,它足够复杂,我不想过多地弄乱它。

我想复制这个故事板并更改配色方案并让用户选择要使用的配色方案。

我的问题是:我能否以编程方式选择启动时默认使用的情节提要?如果是 - 我该怎么做?

我看了一个有点相关的问题:Storyboards Orientation Support in Xcode 4.5 and iOS 6.x ?

基于该代码我做了一个扩展方法:

   static bool IsStoryboardLoading {get;set;}

   public static T ConsiderSwitchingStoryboard<T> (this UIViewController from) where T: UIViewController
   {
       if (!IsStoryboardLoading && LocalStorage.Instance.IsWhiteScheme && false) {
           try {
               IsStoryboardLoading = true; 
               UIStoryboard storyboard = UIStoryboard.FromName ("MainStoryboard_WHITE", NSBundle.MainBundle);
               T whiteView = storyboard.InstantiateViewController (typeof(T).Name) as T;

               from.PresentViewController (whiteView, false, null); 
               return whiteView;
           } finally {
               IsStoryboardLoading = false; 
           }  
       } 
       return null;
   }
}

然后我在ViewDidAppear override 中使用它:

public override void ViewDidAppear (bool animated)
{
    this.ConsiderSwitchingStoryboard<MyViewController> ();
}

此代码在某些情况下有效,但在其他情况下会在执行push segue 时导致错误:

NSGenericException Reason: Could not find a navigation controller for segue 'segSearchResults'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.
  at (wrapper managed-to-native) MonoTouch.ObjCRuntime.Messaging:void_objc_msgSendSuper_IntPtr_IntPtr (intptr,intptr,intptr,intptr)

【问题讨论】:

    标签: xamarin.ios storyboard xamarin xcode-storyboard


    【解决方案1】:

    只使用 1 个 Storyboard 并在同一个 Storyboard 中有 2 组控制器可能会更简单。只需为控制器使用不同的故事板 ID。如果需要,您可以对它们使用相同的类。

    例如:

    var whiteController = Storyboard.InstantiateViewController("MyWhiteController") as MyController;
    var blueController = Storyboard.InstantiateViewController("MyBlueController") as MyController;
    

    两者都可以创建MyController 的实例,但从同一个故事板文件中提取不同的布局。

    另一种选择是使用UIAppearance 为您应用中特定类型的所有控件动态设置“样式”。

    例如,在整个应用中设置默认的UIBarButtonItem 图像:

    UIBarButtonItem.Appearance.SetBackgroundImage(UIImage.FromFile("yourpng.png"), UIControlState.Normal, UIBarMetrics.Detault);
    

    (你可以在那里查看我的参数)

    【讨论】:

    • 情节提要已经够忙了,这意味着它的大小增加了一倍。另外,我仍然必须使用与上面相同的代码来解决相同的问题。所以说真的,这个提议没有任何好处。
    • 那你为什么不能从代码中改变颜色呢?与在情节提要中进行更改相比,使用 UIAppearrance 会更好。
    • 我可以,但我更愿意创建一个 XSD 将我的主故事板转换为第二个故事板,在构建时更改颜色,而不必为每个必须更改的项目编写代码
    • 这似乎是等量的工作,UIAppearance 是一个更标准的解决方案,对其他 Xamarin.iOS 开发人员来说更明显。不过,我将在今天晚些时候对如何使这项工作进行编辑,因为听起来您已经设置了 XSD。
    • 我还没有设置 XSD。我正在寻找一种相当于编辑 info.plist 以替换默认故事板的方法 - 涉及的代码越少,在我的其他代码中的传播越少 - 越好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2014-10-31
    相关资源
    最近更新 更多