ios - monotouch - 可重用的 iOS 自定义 View

标签 ios cocoa-touch xamarin.ios subview

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

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

我想在 Interface Builder 中创建工具栏

我希望能够从任何 View Controller 更新工具栏上的标签。因此,我可能有五个不同的 View Controller ,它们都具有此工具栏,并且可以更新其上的标签。

所以我的问题是:

  1. 我如何开始在 MonoTouch 中子类化 UIView?如果我创建一个新的“iPhone View”,它给我的只是一个 Nib 。我没有地方可以连接 socket 或 Action 。

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

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

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

提前谢谢您!

最佳答案

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

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

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

本质上,您需要创建自定义 subview ,在界面生成器中设置它们,然后在 MonoTouch 端进行一些简单的映射。但让我对这个例子感到困惑的关键点是:

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

当你这样做时,一切都会水到渠成。您已经连接了 Outlet 和 Actions,并且可以随意操纵它们。

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

How do I even begin to subclass UIView in MonoTouch? If I create a new "iPhone View", all it gives me is a nib. I have no place to hook up outlets or actions.

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

创建 iPhone View 后,您应该能够在 IB 中打开“代码 View ”并连接您的 socket 和操作。

Given that you are able to tell me how to set up MonoTouch to have C# code files for subclassing UIView so I can handle events and access properties, how do I hook it up to the nib? I see a lot of people saying to use initWithFrame to call loadNibNamed in Objective-C, but this doesn't correctly translate to MonoTouch. How would I do that in MonoTouch?

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

Given that #1 and #2 are fulfilled, how do I load this custom toolbar into any viewcontroller, and add it at specific coordinates on the screen? Doing the initWithFrame CGRect stuff doesn't seem to have a simple path in MonoTouch

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

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

如上面的链接所示。

享受吧! - 艾莉森。

关于ios - monotouch - 可重用的 iOS 自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13768511/

相关文章:

ios - 如何从应用程序对 Xcode 项目进行逆向工程?

ios - 带有自定义 UITextField 的 UIAlertController

objective-c - 将 UITextField 置于 UITableViewCell 顶部

xamarin.ios - NSTimer.CreateScheduledTimer 与 CreateTimer - 有什么区别?

c# - 抛出 'Foundation.You_Should_Not_Call_base_In_This_Method' 类型的异常

xamarin.ios - 选择器从 objective-c 在已被 GC 处理的托管对象上调用,如何避免 View Controller 被 GC 处理

ios - 在ios上连接数据库

ios - UITextField 中的文本向下移动并闪烁?

iphone - 如何将两个 UIGestureRecognizer 链接在一起?

objective-c - -[国家保留] : message sent to deallocated instance 0x6829280