【问题标题】:Single ViewController with multiple Views in MonoTouchMonoTouch 中具有多个视图的单个 ViewController
【发布时间】:2011-10-30 15:55:37
【问题描述】:

我有一个 iPad 应用程序,它像往常一样具有一个主 ViewController 及其主视图,但我有许多叠加层(作为单独的视图实现)。我希望所有这些视图都由主视图控制器控制/拥有。

覆盖视图集被打包到单个 XIB 中(仅用于 IB 设计目的,没有代码后面),并从主视图控制器手动加载,并为每个视图转换为适当的视图类,作为单独的 . cs 文件。

一切正常,但是因为在视图 XIB 中,所有者被设置为主 ViewController 类(为了生成事件、出口的设计器代码),它还为主视图控制器类生成了一个 Register 属性,它与主视图控制器 XIB 设计器文件中已生成的相同寄存器属性相冲突。

我的问题是:有没有办法阻止 MonoTouch/IB 为视图 XIB 自动生成 Register 属性?

谢谢, 佩德罗

我正在使用 XCode/IB 3.2.6、MonoTouch 4.0.5、MonoDevelop 2.4.2、MonoFramework 2.10.4

【问题讨论】:

  • XIB generation 上的 MonoTouch 文档中,关于跨 XIB 方案尚不清楚。
  • 我实现了一个基于 .NET 设计模式的解决方案,我会在 StackOverflow 允许的时候发布它。

标签: ios attributes xamarin.ios xib viewcontroller


【解决方案1】:

好的,我实现了一个解决方案,它满足了我之前的要求,但有一些缺点,可能适用于某些场景,但对于其他场景来说不是一个好的设计模式。

我在后面的 XIB/代码中实现了我的主视图控制器,并将其命名为 MainBaseViewController。它只有最少的 UI 元素,因为它主要是所有其他视图的可视化容器。然后我在一个单独的 .cs 文件中创建了一个名为 MainViewController 的类(继承自 (MainBaseViewController),它是一个部分类,以便连接到由视图 XIB 生成的设计器代码。这个类将包含视图控制器的所有逻辑. 唯一的缺点是 MainBaseViewController 中的任何 UI 元素(出口)都将由 MonoTouch 生成为私有的,我需要在类实现中创建一些受保护的访问器,但没关系,因为它只是视图出口(但这可能是如果基础 XIB 有很多控件,则会出现问题)。

恢复:

  • MainBaseViewController 类和 XIB 将具有用于任何出口的受保护访问器,并且只有用于应用程序中其他视图的基本 UI 容器。

  • MainViewController是一个.cs文件,是一个继承自MainBaseViewController的部分类,实现了视图控制器的所有逻辑(管理所有其他视图)

  • 视图存储在 MainViews XIB 中(没有代码隐藏),视图的文件所有者是 MainViewController 类,它生成所有可从 MainViewController 类访问的出口和事件。

  • 单独的 .cs 文件为视图 XIB 中包含的每个视图实现每个特定逻辑,这些逻辑是在主控制器从视图 XIB 动态加载视图时创建的。

此解决方案允许将视图存储在单独的文件中,视图控制器逻辑存储在另一个文件中(除了 UI)和特定的视图逻辑单独

还有其他解决方案或更好的设计模式吗?另一个更简单的选择是将所有视图粘贴在主控制器 XIb 中,从而失去控制器和视图的独立性。

谢谢,佩德罗

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2015-11-28
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多