0

当我在 Xcode 中创建插座时,MonoTouch 在 *.designer.cs 文件中为该特定视图创建相同的属性。

namespace MyApp
{
    [Register ("CustomCell")]
    partial class CustomCell
    {
        [Outlet]
        MonoTouch.UIKit.UISwitch Toggle { get; set; }

        void ReleaseDesignerOutlets ()
        {
            if (Toggle != null) {
                Toggle.Dispose ();
                Toggle = null;
            }
        }
    }
}

但如您所见,将这些属性限定为私有。

有没有办法通过 XCode 或 MonoTouch 告诉系统这些应该生成为公共的、受保护的还是内部的?

当然,我可以在这个部分类的实现端公开属性,作为这些属性的代理,但我希望有一种更简洁的方法。

4

2 回答 2

2

不要担心它们是属性,这是插座的实现细节。您可以将它们视为私有字段 - 因此可以通过非设计器类部分上更易于访问的属性来公开它们。

使它们更易于访问的另一种方法是将它们移动到非设计器类部分。插座不必在设计师类部分。

同步的工作原理:

设计器文件的工作方式是,当 MD 同步到 Xcode 时,它​​会在类的所有部分(包括设计器类)上找到所有出口,并将这些出口同步到 obj-c 头文件中。当它将 obj-c 头文件同步回 MD 时,它会尝试查找非设计器类部分中的每个插座,然后重新生成具有不匹配插座的设计器文件。

这意味着如果您在 obj-c 头文件中添加一个插座,它将被添加到设计器文件中。这也意味着,如果您在 obj-c 头文件中删除了一个出口,那么当重新生成设计器文件时,它将有效地从设计器文件中删除 - 除非它在某个其他类部分中,在这种情况下,删除将不会被同步.

obj-c 头文件中的 outlet 没有任何可访问性,因此 MD 在重新生成头文件时无法同步它,而 private 是一个很好的默认值,因为它促进封装,如果需要,您可以通过包装器属性轻松公开它们或通过移动它们。

于 2012-08-24T23:24:16.347 回答
0

目前没有办法让 MonoDevelop 为暴露的 outlet 生成不同的可见性属性。

您想到的用例场景是什么?

于 2012-08-24T18:31:01.340 回答