我已经尝试过几种不同的方法,但这并没有按预期工作。这是一个混合iOS应用程序,大约一半的屏幕UIViewControllers具有主UIWebView。处理UIWebView事件有很多类似的逻辑,特别是在错误处理方面。子类稍微专门用于处理呈现的屏幕。所以,类图大致是:
UIViewController
+- BaseWebController <-- this class should bind to UIWebView
+-- ScreenAController
+-- ScreenBController
+-- ...
BaseWebController.designer.cs非常基本。事实上,一旦连线它看起来像:
[Register ("BaseWebController")]
partial class BaseWebController
{
[Outlet]
MonoTouch.UIKit.UIWebView WebView { get; set; }
void ReleaseDesignerOutlets ()
{
if (WebView != null) {
WebView.Dispose ();
WebView = null;
}
}
}
问题是:我得到了各种异常,因为UIWebView未正确绑定到WebView实例。我收到各种消息,例如'无法在ScreenAController'上找到选择器setWebView,但它归结为(我认为)它正在尝试绑定父类(ScreenAController)并失败。
问题:我是否遗漏了这种绑定应该如何工作的内容?本质上我试图保持这个非常干燥并将所有重复的代码推送到基类。否则,我将最终重复相同的100行连线代码和每个屏幕的错误检查。
TIA。
答案 0 :(得分:1)
我猜你对继承和绑定的看法是对的,而不是凝胶化。
您可以通过添加以下内容来妥协:
[outlet]
new UIWebView WebView
{
get { return base.WebView; }
set { base.WebView = value;}
}
到每个ScreenController类。
不是完全干,但比复制所有课程中的所有内容要好。
答案 1 :(得分:1)
答案 2 :(得分:0)
@Stuart:
右。我的结局与你提到的非常相似。我决定让每个父类(ScreenAController,ScreenBController)绑定到同一个视图并实现由基类定义的抽象属性:
protected abstract UIWebView ActiveWebView { get; }
该基类在其构造函数中设置xib文件。 ScreenAController,ScreenBController,...,实现该属性,它实际上只是对该出口的引用。它尽可能干涸。这就是你所说的。
/// <summary>
/// Provides access to the base class to handle most error handling.
/// </summary>
protected override UIWebView ActiveWebView { get { return this.WebView; } }
@mhutch,我会仔细看看那个bug。我现在可以解决这个问题。
谢谢!