在卡布奇诺队扩展课程
卡布奇诺(5)我找到的最美好的东西之一卡布奇诺是它易于定制的。它经常认为沉重的框架限制了您的选项,但具有良好的设计,它们还可以曝光定制逻辑,以便快速且易于创建正确执行的小部件1。
当我是汇集了Mahou的初稿,我无法在我的应用程序中找到一个直观的方式来提供一种超级链接。卡布奇诺侧重于应用程序开发,并没有互联网比互联网效果很好(虽然,这是创造的小部件的问题,而不是一个不可逾越的障碍)。
我的点击问题的解决方案是子类CPText菲尔德
创建一个TextField,当单击时,将您带到任意URL。我将使用这个简单的例子作为扩展卡布奇诺的简要介绍。
扩展卡布奇诺的第一步是弄清楚子类的哪个类。卡布奇诺文档非常好,并帮助介绍所有各种课程。
一旦您将课程挑选到子类,您必须弄清楚继承树中的位置以子类。例如,
CPText菲尔德
有一个相当长的遗产链:cpobject.
- >cpresponder
- >CPView.
- >cpcontrol.
- >CPText菲尔德
。这通常是通过加入继承树并寻找适当的方法来实现的。不同的类侧重于不同的功能子集(
CPView.
处理大小化和放置,cpresponder
处理UI事件,cpcontrol.
处理UI显示等)。在我的情况下,我知道我想要覆盖的功能会在某个地方撒谎
cpresponder
类,因为我想自定义响应UI事件。我们继续专注于我们想要覆盖的具体类方法。出于我的目的,Textfield需要在点击时执行一些事情,所以我浏览了文档并决定了我需要子类
Mousedown:
或者鼠标
方法。翻转硬币后(并对UI反应的响应能力反对最大的原则),我决定去
Mousedown:
。最后,我们需要实现功能。我们要打开一个新的窗口,检索特定的网页。我找不到一种方法来实现这一点,但幸运的是,我完全知道如何在JavaScript中做到这一点,而且Object-j是一个javascript的超集,所以我可以在JavaScript中做任何我可以做的事情 -j。
目标-J代码的第一草稿出现了:
进口<基础/cpobject.。j>进口<appkit./CPText菲尔德。j>
@执行Wlurllabel.:CPText菲尔德{}
-(空白)Mousedown:(CPEvent.)一个事件{窗户。打开(“//www.klytx.com”);}@结尾
但是,似乎很可能最终希望想要多个可点击的链接,所以硬编码URL并不是真正削减它。所以我做了五分钟的投资来使代码可重复使用。
进口<基础/cpobject.。j>进口<appkit./CPText菲尔德。j>
@执行Wlurllabel.:CPText菲尔德{cpstring._URL.;}
-(空白)Mousedown:(CPEvent.)一个事件{窗户。打开([自己URL.]);}
-(cpstring.)URL.{返回_URL.;}
-(空白)seturl:(cpstring.)录制{_URL.=录制;}@结尾
啊。当他们做可可时,受访者和verators的乐趣渗透着卡布奇诺。
最后一步是使用
Wlurllabel.
在一些代码中,这将是这样的:var.myframe.=cgrectmake.(0.那0.那100.那30.);var.标签=[[Wlurllabel.alloc.]initwithframe:myframe.];[标签setStringValue:@“点击这里访问谷歌。”];[标签seturl:@“http://www.google.com”];[标签setfont.[cpfont.Boldsystemfontofsize:12.0]];//更改颜色使链接更加明显[场地settextcolor:[cpcolor.惠;]];[ContentView.addsubview:标签];
总而言之,卡布奇诺中的自定义内容是一个相当简单的过程。从这样一个简单的例子中是什么并不明显的,即甚至制作了大而看似复杂的变化将遵循这种完全相同的模式。
这里的许多优点只是因为目标-J中的进口机制。具有一致性的导入机制使得将代码扩展到多个组织文件中,这使得代码更可重复使用和修改更快。
如果您有任何问题或评论,请告诉我!
对于那些可能有兴趣的人,我只需使用Pygent的Object-C语法HighLigher用于代码片段。它最终做了一个非常合理的工作。↩