xamarin.ios - 支持两个 Storyboard

标签 xamarin.ios storyboard xamarin xcode-storyboard

我有一个带有中等大小 Storyboard的应用程序,它足够复杂,我不想过多地处理它。

我想复制此 Storyboard并更改配色方案,并让用户选择要使用的配色方案。

我的问题是:我可以通过编程方式选择启动时默认使用哪个 Storyboard吗?如果是 - 我该怎么做?

我查看了一个有些相关的问题: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 覆盖中使用它:

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

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

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)

最佳答案

仅使用 1 个 Storyboard 并在同一个 Storyboard 中使用 2 组 Controller 可能会更简单。只需为 Controller 使用不同的 Storyboard id 即可。如果需要,您可以对它们使用相同的类。

例如:

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

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

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

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

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

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

关于xamarin.ios - 支持两个 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16309097/

相关文章:

xcode - 移动 XCode 位置会破坏通过 MonoDevelop 进行的 Monotouch 编译

iOS:访问调用 Segue 的同一 UIViewController 实例

xamarin - 在RelativeLayout Xamarin Forms中将 View 与底部和顶部对齐

c# - iOS 应用程序 (Xamarin) 与 iOS XAML 应用程序 (Xamarin.Forms) 与跨平台之间有什么区别

Xamarin.iOS 找不到类型 BaseType 属性

.net - MonoTouch 和 IDisposable 模式

ios - Xamarin.iOS - 发布应用程序 - 无效的 Swift 支持

wpf - 在以编程方式添加的控件上使用 Storyboard 动画

ios - Xcode6 - ibtool 失败,退出代码为 255

c# - Xamarin - 绑定(bind)到 ControlTemplate 中的静态类