Xamarin.ios 支持两个故事板

Xamarin.ios 支持两个故事板,xamarin.ios,storyboard,xamarin,xcode-storyboard,Xamarin.ios,Storyboard,Xamarin,Xcode Storyboard,我有一个带有中等大小故事板的应用程序,它足够复杂,我不想把它弄得太乱 我想复制这个故事板并更改配色方案,让用户选择要使用的配色方案 我的问题是:我能否以编程方式选择启动时默认使用的情节提要?如果是-我该怎么做 我看了一个有点相关的问题: 基于该代码,我创建了一个扩展方法: static bool IsStoryboardLoading {get;set;} public static T ConsiderSwitchingStoryboard<T> (this UIVi

我有一个带有中等大小故事板的应用程序,它足够复杂,我不想把它弄得太乱

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

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

我看了一个有点相关的问题:

基于该代码,我创建了一个扩展方法:

   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;
   }
}
此代码在某些情况下有效,但在其他情况下,在执行
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)

在同一个故事板中只使用一个故事板和两组控制器可能更简单。只需为控制器使用不同的情节提要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);

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

故事板已经足够忙了,这意味着它的大小将增加一倍。另外,我仍然需要使用与上面相同的代码来解决相同的问题。所以说真的,这个提议没有任何好处。为什么你不能从代码中改变颜色呢?使用UIAppearance比在情节提要中进行更改要好得多。我可以,但我更愿意创建一个XSD,在构建时将我的主情节提要转换为颜色发生变化的第二个情节提要,而不必为每个必须更改的项编写代码,这看起来相当于工作量,
UIAppearance
是一个更标准的解决方案,对其他Xamarin.iOS开发人员来说更为明显。今天晚些时候,我将对如何实现这一点进行编辑,因为听起来你已经设置了XSD。我还没有设置XSD。我正在寻找一种相当于编辑info.plist来替换默认情节提要的方法——涉及的代码越少,在我的其他代码中传播的越少——越好。
UIBarButtonItem.Appearance.SetBackgroundImage(UIImage.FromFile("yourpng.png"), UIControlState.Normal, UIBarMetrics.Detault);