2

好的,所以这个可能有点挑战性,因为它是单点触控......

我有一个可重复使用的自定义工具栏,我计划在多个屏幕上重复使用它。

我想在 Interface Builder 中创建工具栏

我希望能够从任何视图控制器更新工具栏上的标签。所以我可能有五个不同的视图控制器,它们都有这个工具栏,并且可以更新它上面的标签。

所以我的问题是:

  1. 我什至如何开始在 MonoTouch 中继承 UIView?如果我创建一个新的“iPhone View”,它给我的只是一个笔尖。我没有地方可以联系渠道或行动。

  2. 鉴于您能够告诉我如何设置 MonoTouch 以拥有用于子类化 UIView 的 C# 代码文件,以便我可以处理事件和访问属性,我如何将它连接到 nib?我看到很多人说要在 Objective-C 中使用 initWithFrame 来调用 loadNibNamed,但这并不能正确地转换为 MonoTouch。我将如何在 MonoTouch 中做到这一点?

  3. 鉴于 #1 和 #2 已实现,我如何将此自定义工具栏加载到任何视图控制器中,并将其添加到屏幕上的特定坐标处?在 MonoTouch 中做 initWithFrame CGRect 的东西似乎没有简单的路径

如果有人能解决这个问题,你太棒了!!!!

提前谢谢你!

4

2 回答 2

2

所以经过大量的挖掘,我终于找到了答案。

信息最丰富的教程在这里:

http://sgmunn.com/blog/2012/03/using-loadnib-to-load-a-view/

本质上,您需要创建自定义子视图,在界面构建器中设置它们,然后在 MonoTouch 端进行一些简单的映射。但是让我脱离这个例子的关键点是:

在子类化 UIView 时,您必须实现 IntPtr 的基本构造函数

当你这样做时,一切都会到位。您已将 Outlets 和 Actions 连接起来,并且可以随意操作它们。

编辑:比仅仅链接更具描述性......

我什至如何开始在 MonoTouch 中继承 UIView?如果我创建一个新的“iPhone View”,它给我的只是一个笔尖。我没有地方可以联系渠道或行动。

创建一个新的 iPhone 视图,它将创建一个笔尖。打开笔尖,将“自定义类”设置为您的自定义类。MonoTouch 应该会自动生成它。如果没有,请创建一个新的 C# 类和子类 UIView,但请确保为 IntPtr 创建构造函数。如果您使用 Storyboard,当您调用 Storyboard.InstantiateViewController() 时,它会为您填写 IntPtr 值。请注意,如果您使用 Storyboard.InstantiateViewController,您还需要将标识符设置为自定义类的名称。

一旦你创建了那个 iPhone 视图,你应该能够在 IB 中打开“代码视图”并连接你的插座和操作。

鉴于您能够告诉我如何设置 MonoTouch 以拥有用于子类化 UIView 的 C# 代码文件,以便我可以处理事件和访问属性,我如何将它连接到 nib?我看到很多人说要在 Objective-C 中使用 initWithFrame 来调用 loadNibNamed,但这并不能正确地转换为 MonoTouch。我将如何在 MonoTouch 中做到这一点?

MonoTouch 中没有 initWithFrame: 或 CGRect,您使用的是 RectangleF。如果以编程方式加载 nib,则可以使用接受 RectangleF 的构造函数并使用它来设置 x、y、宽度、高度。

鉴于 #1 和 #2 已实现,我如何将此自定义工具栏加载到任何视图控制器中,并将其添加到屏幕上的特定坐标处?在 MonoTouch 中做 initWithFrame CGRect 的东西似乎没有简单的路径

对于 Storyboard,请使用 Storyboard.InstantiateViewController(确保在 IB 中设置标识符)。对于其他所有内容,请使用:

var nibObjects = NSBundle.MainBundle.LoadNib("YourViewName", theController, null);
var instantiatedView = (YourClassName)Runtime.GetNSObject(nibObjects.ValueAt(0));

如上面的链接所示。

享受!- 艾莉森。

于 2012-12-07T20:13:44.047 回答
0

您可以使用容器视图和情节提要参考来实现相同的目的,而不是从 iOS 9 开始加载 Nib 文件。

你可以在这里查看

于 2019-03-05T03:00:49.990 回答