monotouch - 可重复使用的iOS自定义视图

时间:2012-12-07 18:00:24

标签: ios cocoa-touch xamarin.ios subview

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

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

我想在Interface Builder

中创建工具栏

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

所以我的问题是:

  1. 我如何开始在MonoTouch中继承UIView?如果我创建一个新的“iPhone视图”,它给我的全部是一个笔尖。我没有地方可以连接出口或行动。

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

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

  4. 如果有人能够解决这个问题,那你就太棒了!!!!

    提前谢谢你!

2 个答案:

答案 0 :(得分:2)

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

最丰富的教程在这里:

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

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

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

当你这样做时,一切都会到位。你将你的奥特莱斯和动作联系起来,并可以随意操纵它们。

编辑:更具描述性而不仅仅是链接...

  

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

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

创建iPhone视图后,您应该可以在IB中打开“代码视图”并连接您的插座和操作。

  

鉴于您能够告诉我如何设置MonoTouch以获得C#   用于子类化UIView的代码文件,以便我可以处理事件和访问   属性,如何将其连接到笔尖?我看到很多人   说使用initWithFrame来调用Objective-C中的loadNibNamed,但是   这不能正确转换为MonoTouch。我该怎么做呢   MonoTouch的?

在MonoTouch中没有initWithFrame:或CGRect,您使用RectangleF。如果以编程方式加载nib,则可以使用接收RectangleF的构造函数,并使用它来设置x,y,width,height。

  

鉴于已满足#1和#2,如何加载此自定义工具栏   进入任何viewcontroller,并将其添加到特定的坐标上   屏幕?执行initWithFrame CGRect的东西似乎没有   MonoTouch中的简单路径

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

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

如上面的链接所示。

享受! - Allison。

答案 1 :(得分:0)

您可以使用容器视图和情节提要参考来实现从iOS 9开始加载Nib文件的功能。

You can check here