iPhone静态库应用之封装控件库教程

移动开发 iOS
本文介绍的是iPhone静态库应用之封装控件库教程,我们使用iPhone静态库把自定义组件CheckButton 进行进一步的封装,来看内容。

iPhone静态库应用之封装控件库教程是本文要介绍的内容,由于iPhone控件的极度匮乏和自定义组件在重用上的限制,在过去的项目中我们积累了大量的“纯代码”组件——因为IB本身的限制,我们无法把这些组件封装为IB组件库(本来我们想通过分发xib文件的方式重用这些组件,但最终发现这根本不可能,苹果的Plug-in编程不支持iPhone)。

最终我们想到了静态库。虽然这仍然还是一种比较原始的复用方式,但起码我们可以隐藏组件的源代码。下面, 我们使用iPhone静态库把自定义组件CheckButton 进行进一步的封装。(组件的实现参考前一篇博文《自定义控件复选框和单选框的实现》)

一、实现静态库

新建工程, 选择 Library 下的 “ Cocoa Touch Static Library ” 。给工程命名,例如:yhyLibrary。                 

复制CheckButton组件的4个源文件:CheckButton.h、CheckButton.m、RadioGroup.h、RadioGroup.m到Classes目录下,同时把CheckButton的4个资源文件:check.png、uncheck.png、radio.png、unradio.png,复制到工程文件夹。

按下 ⌘ +b编译,在Products目录下即产生一个 .a文件。

二、 新建资源束

静态库中并不能包含资源文件,虽然我们已经把4个资源文件(.png文件)拷贝到静态库工程中,但实际上这些.png是不会添加到target的,也就是说编译结果中并不包含这些资源,因此如果此时调用静态库,所有的资源(字符串、图片)都是缺失的。

我们可以把资源建立成单独的束(Bundle)。

新建工程“ Mac OS X  -> Framework & Library -> Bundle ”,命名为:yhyLibraryBundle。

然后把上面4个.png文件拷进Resouces中去。编译,生成yhyLibraryBundle.bundle文件。

返回静态库工程,新建一个类:Utils 。

编辑Utils.h:

  1. #define MYBUNDLE_NAME @ "yhyLibraryBundle.bundle"   
  2. #define MYBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: MYBUNDLE_NAME]   
  3. #define MYBUNDLE [NSBundle bundleWithPath: MYBUNDLE_PATH]   
  4. NSString * getMyBundlePath( NSString * filename);  

编辑Utils.m:

  1. #import "Utils.h"   
  2. NSString* getMyBundlePath( NSString * filename)   
  3. {   
  4. NSBundle * libBundle = MYBUNDLE ;   
  5. if ( libBundle && filename ){   
  6. NSString * s=[[libBundle resourcePath ] stringByAppendingPathComponent : filename];   
  7. NSLog ( @"%@" ,s);   
  8. return s;   
  9. }   
  10. return nil ;   
  11. }  

函数getMyBundlePath可以取得束yhyLibraryBundle中具体资源的绝对文件路径,如:

  1. /Users/kmyhy/Library/Application Support/iPhone Simulator/4.2/Applications/8213652F-A47E-456A-A7BB-4CD40892B66D/yhyLibTest.app/
  2. yhyLibraryBundle.bundle/Contents/Resources/radio.png  

同时,修改CheckButton.m中的代码,导入Utils.h头文件,把其中获取图片的代码由imageNamed修改为imageWithContentsOfFile,如:

  1. [ icon setImage :[ UIImage imageWithContentsOfFile : getMyBundlePath ( checkname )]];  

即通过绝对路径读取图片资源。

除了这种方法,我们还可以有一个简单办法,就是把4个资源文件直接拷贝到你调用静态库的应用工程中(不需要修改静态库代码)。

三、静态库调用

1、添加静态库

新建Window-based Application工程,给工程命名,如yhyLibraryTest。

右键点 Frameworks->Add->Existing Files.. ,把静态库工程的yhyLibrary.xcodeproj文件 添加到当前工程(不要选择 Copy items ) 。

选中添加进来的yhyLibrary.xcodeproj文件,勾选“include to target”选项,如下图,打上***一个小勾:

iPhone静态库应用之封装控件库教程

2、添加Direct Dependencies(即引用工程)

类似于Visual Studio中的引用工程,目的是便于在本工程中直接编辑所引用的静态库工程,以便对静态库进行修改。

在“ Targets ”目录下选择“ FirstLibraryTest ”,点击“info”按钮,调出目标的属性窗口,切换到“General”栏,点击“ Direct Dependencies ”下方的“ + ”按钮,将工程静态库libyhyLibrary添加到Direct Dependencies中,结果如下图:

iPhone静态库应用之封装控件库教程

3、添加头文件搜索路径

打开工程的info窗口,在Build栏中找到Header Search Paths,添加字符串“../yhyLibrary”。

4、 引用资源束

在target的Copy Bundle Resources上右键,选择“Add->Existing File…”,把前面生成的yhyLibraryBundle.bundle束添加到工程。

5、调用静态库中的类

编辑 application:( UIApplication *)application didFinishLaunchingWithOptions: 方法中的代码:

  1. // 单选按钮组   
  2. RadioGroup * rg =[[ RadioGroup alloc ] init ];   
  3. // 第 1 个单选按钮   
  4. CheckButton * cb=[[ CheckButton alloc ] initWithFrame : CGRectMake ( 20 , 60 , 260 , 32 )];   
  5. // 把单选按钮加入按钮组   
  6. [ rg add :cb];   
  7. cb. label . text = @"★" ;   
  8. cb. value =[[ NSNumber alloc ] initWithInt : 1 ];   
  9. // 把按钮设置为单选按钮样式   
  10. cb. style = CheckButtonStyleRadio ;   
  11. // 加入视图   
  12. [ self . window addSubview :cb];   
  13. [cb release ]; //add 后,会自动持有,可以释放   
  14. // 第 2 个单选按钮   
  15. cb=[[ CheckButton alloc ] initWithFrame : CGRectMake ( 20 , 100 , 260 , 32 )];   
  16. [ rg add :cb];   
  17. cb. label . text = @"★★" ;   
  18. cb. value =[[ NSNumber alloc ] initWithInt : 2 ];   
  19. cb. style = CheckButtonStyleRadio ;   
  20. [ self . window addSubview :cb];   
  21. [cb release ];   
  22. // 第 3 个单选按钮   
  23. cb=[[ CheckButton alloc ] initWithFrame : CGRectMake ( 20 , 140 , 260 , 32 )];   
  24. [ rg add :cb];   
  25. cb. label . text = @"★★★" ;   
  26. cb. value =[[ NSNumber alloc ] initWithInt : 3 ];   
  27. cb. style = CheckButtonStyleRadio ;   
  28. [ self . window addSubview :cb];   
  29. [cb release ];  

运行结果如下:

iPhone静态库应用之封装控件库教程

6、分发静态库

将生成的.a文件和.bundle文件打包分发给其他人。

小结:iPhone静态库应用之封装控件库教程的内容介绍完了,希望本文对你有所帮助!

责任编辑:zhaolei 来源: CSDN博客
相关推荐

2011-08-10 10:23:20

iPhoneArchivingNSCoder

2011-07-18 15:52:50

iPhone 静态库

2021-07-11 06:45:18

Linux内核静态

2011-08-18 13:37:57

iPhone项目静态库

2011-08-16 19:02:23

iPhone开发绘图

2011-08-15 18:02:32

iPhone开发表视图

2011-08-11 10:27:37

iPhoneUIView视图

2011-08-11 10:16:23

iPhoneUIView视图

2011-08-05 16:31:47

iPhone 数据库

2011-08-02 14:15:05

XCode 静态 链接库

2011-08-12 11:31:46

iPhoneUIView动画

2011-08-15 10:15:00

iPhone开发警告框

2011-07-25 14:14:49

iPhone SQLITE Pldatabase

2011-08-11 11:51:07

iPhone键盘

2011-07-08 14:58:16

iPhone Xcode iOS

2011-08-19 14:27:29

iPhone开发

2011-07-27 10:16:41

iPhone SQLite 数据库

2011-06-09 11:11:35

QT 静态库 动态库

2011-06-01 14:20:37

Android

2011-08-09 13:10:32

iPhone地图开发
点赞
收藏

51CTO技术栈公众号