自己做的framework xib怎么加载xib

ios - iOS8: How to load xib from Dynamic Framework - Stack Overflow
to customize your list.
Stack Overflow is a community of 4.7 million programmers, just like you, helping each other.
J it only takes a minute:
Join the Stack Overflow community to:
Ask programming questions
Answer and help your peers
Get recognized for your expertise
I am using Cocoapods pre-release 0.36 to build and deploy a private dynamic framework into an app bundle.
I am using the resources attribute to copy xibs, and they show up in the app bundle.
s.subspec 'Views' do |ss|
ss.resources = ['All/My/Folders/**/*.{xib,png}']
I am trying to load reusable controls from the xibs like this:
NSBundle.mainBundle().loadNibNamed("MyXib", owner:loader, options:nil)
but this is failing as it cannot find the xib in my embedded sub framework.
The actual xib (nib) paths follow the pattern:'
./Frameworks/MyPrivateFramework.framework/MyXib.nib
My question is, is there a simple, code agnostic way of loading the xib that will work when packaged in an iOS 8 framework - or do I have to explicitly hardcode in the above path?
The above loading code worked until I think the dynamic framework change.
3,21011832
From this post here:
I arrived at the agnostic solution of getting the framework bundle from a class within, ie:
NSBundle(forClass: ClassInFramework.self)
and then loading the xib from that:
NSBundle(forClass: ClassInFramework.self)
.loadNibNamed("ClassInFramework", owner:loader, options:nil)
and that worked.
3,21011832
Your Answer
Sign up or
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Post as a guest
By posting your answer, you agree to the
Not the answer you're looking for?
Browse other questions tagged
Stack Overflow works best with JavaScript enabledtrackbacks-0
相关链接:
一、Framework 简介(Introduction to Framework Programming Guide)
Mac OS X 扩展了 framework 的功能,让我们能够利用它来共享代码和资源。通过 framework
我们可以共享所有形式的资源,如动态共享库,nib 文件,图像字符资源以及文档等。系统会在需要的时候将 framework
载入内存中,多个应用程序可以同时使用同一个 framework,而内存中的拷贝只有一份。一个 framework 同时也是一个
bundle,我们可以在 finder 里浏览其内容,也可以在代码中通过 NSBundle 访问它。利用 framework
我们可以实现动态或静态库的功能。
二、Framework制作方法
1、首先新建两个项目,分别为FrameworkHome 和&FrameworkDemo,其中FrameworkHome为framework制作项目,FrameworkDemo为framework测试项目。
(1)建立FrameworkHome(选择静态库模版)
a、选择工程模版
b、清理工程无用文件(&Target 、 &FrameworkHome、&FrameworkHomeTests)
c、删除旧目标对应的编译设置
点击Manage Scheme
点击左下角 & - & 号
选择Delete并且点击OK
d、增加一个新的Target
点击 Add Target
点击Next,并且配置不需要需改,起一个名字,然后点击Finish
e、修改项目配置
点击 &步骤d& 中创建的Target,并选择&Build Settings -& &Architectures
-&&Base SDK &改为Latest iOS(ios 7.0)
并将&Architectures
改为 Standard architectures (armv7, armv7s)
Deployment 下,将 &Mac OS X Deployment Target&改为&Compiler Default&,将
&Targeted Device Family&改为需要的,此处改成了&iPhone/iPad&,同时可以根据需要修改 &iOS
Deployment Target&,此处改为了
&iOS 5.0&:
Linking 中,将 &Dead Code Stripping& 改为 &NO&,将 &Link with Standard
Libraries& 改为 &NO&,将 &Mac-O Type& 改为 &Relocatable Object File&:
&Packaging 中,将 &Wrapper Extention& 改为&framework&:
修改 Info,将 &Bundle OS Type Code& 改为 &FMWK&(Framework )
修改预编译头文件,注视其中代码
到此为止,基本的配置就算完成了,可以看到现在的 Products中的文件为
DemoLibrary.framework,不错,这个就是给FrameworkDemo
使用的framwwork,虽然现在FrameworkDemo还没有创建。但在这之前首先编写一些&DemoLibrary.framework
中的内容,然后把接口提供给FrameworkDemo。
f、提供对外接口
首先,创建一个类,建议不要使用IXIB,因为以后打包成 framework以后,我遇到了viewController找不到XIB文件的问题,所以不建议使用XIB。
创建两个ViewController,分别为&OpenViewController 和 PraviteViewController ,其中OpenViewController 是对外公开的接口,内部实现使用到了&PraviteViewController。
别忘记选择Target
g、导出头文件
选中Target(DemoLibrary ) -& Build Phases - & Editor - & Add Build Phase - & Add Copys Headers Build Phase&
展开 &Copy Headers&
点击右下角的 & + &选择相应的 .h 文件来添加对外的接口
还要把相应Project下的文件拖动到Public下
大功告成,但这个地方有一个细节要注意,当前选择build生成的framework要选择ios Device,不要选择你当前链接的真机,否则会出现在打包的framework在别的机器上使用时出错。
另外,当前的framework适合真机,如果要做模拟器的framework,要修改成模拟器版本
现在可以build &FrameworkHome 工程了!
这个地方有个小技巧,当选择模拟器,build之后,发现Products下的文件仍然是红色字体,表示不存在,实际上文件已经有了。那把模拟器换
成Devixe,再build一下,会发现DemoLibrary.framework 字体变黑,表示文件有了,用finder找到起位置:
其中Debug-iphoneos中的framework就是真机版本的,下边的文件夹就是模拟器版本的。
2、建立FrameworkDemo工程,选择Empty Application模版就可以了,将刚刚生成的
&DemoLibrary.framework
拷贝(也可以引用形式)拖拽到FrameworkDemo中并运行FrameworkDemo。这个地方还有个小细节,FrameworkDemo
-&Target - & Architectures 的设置要和framework中的设置相同,不然会出现问题。
编译运行:
控制台打印:
补充:一般framework项目中会有一些图片等资源要一同提供给使用者,这时就需要将这些资源打包成bundle文件,和framework一起拷贝到相应的项目中。
1、建立bundle文件
新建文件夹 -& 将图片资源放到文件夹中 - & 改文件夹名字为 & &XXX.bundle ,再将这个bundle文件一同放到目标工程中。
2、读取文件
framework中的代码就要这样读取文件了,当然还有其他的初始化路径方法,有需要的可以以后补充。
NSBundle&*bundle&=&[NSBundle&bundleWithURL:[[NSBundle&mainBundle]&URLForResource:@"Resource"&withExtension:@"bundle"]];&&
UIImage&*img&=&[UIImage&imageWithContentsOfFile:[bundle&pathForResource:@"testImg"&ofType:@"png"]];&&
[viewCtr.view&addSubview:[[UIImageView&alloc]&initWithImage:img]];&&
3、一些错误的解决办法
/questions//duplicate-symbol-error-in-xcode
duplicate symbol _NXArgcin:
解决办法:Please set the option "Link with Standard Library" to NO in your build setting
也可以参考:
4、建立一个真机和模拟器通用的framework
首先用finder找到framework所在的位置
然后找到framework中的文件,例如这里的 &Kalagame-library,并且纪录其路径 &os_frame_path
同样方法打开另一个文件夹,纪录其中库的路径,simulator_frame_path
然后打开控制台,输入&lipo -create os_frame_path& simulator_frame_path& -output &newframe
这样就完成了模拟器和真机版本framework的合并,用finder找到这个newframe,然后把newframe改名字(例如这里的Kalagame-library),并放回到framework文件夹中,替换原来的文件。
补充():
1、在制作framework或者lib的时候,如果使用了category ,则使用该FMWK的程序运行时会crash,此时需要在该工程中 other linker flags 添加两个参数 &-ObjC -all_load
2、编译出Framework是,需要把 GenerateDebugSymbols =NO,project与target都要设置下,否则会出现很多 warning:
warning: (armv6) /Users/myuser/Library/Developer/Xcode/DerivedData/&....build/Objects-normal/armv6/ImageRequest.o&unable to open object file
ios static library 为什么代码只有700k,最终编译出来的有3.4m。&
1: 选择的是debug模式,改成release模式后,估计能够降低很多。
2:ios static library 是静态库,包含了所有的引用到的代码,因此多出来的大小,是引用的代码的大小。所以改成release以后,大小也不是固定的,取决你所引用代码的多少。
补充():
公开了public的类,但public类中引用了private的类,于是打包好之后,对外会报错,说找不到那个private类。 &可以把 import &private.h& &放到 public 的.m中,这样就不会报错了。
阅读(...) 评论()8067人阅读
iPhone开发(326)
在Xcode 3.x中,将xib从iPhone版转变为iPad版,通过Create iPad Version菜单。但在Xcode 4.x中,这个菜单找不到了。通过一番摸索,笔者发现可以用如下方法将xib转换为iPad版本。1、修改xib源文件xib文件其实是一个xml文件,你可以以文本方式编辑和修改它。在Project Navigator中,在xib文件上右键,选择“Open As -&Source Code”,即可以源代码方式查看xib文件,找到&com.apple.InterfaceBuilder3.CocoaTouch.XIB&一行,将其改为 &com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB&,即在&.XIB&前插入一个&.iPad&。按下?+F,打开搜索栏,点击Replace菜单,将模式改变替换模式。将xib文件中所有&IBCocoaTouchFramework&用 &IBIPadFramework&替换。按下?+S,保存修改。2、修改xib的视图尺寸在xib文件上右键,选择“Open As -& Interface Builder – iOS”,用IB模式打开。选择xib文件中的根视图(UIView),在属性面板中找到Size选项,将其改为Full iPad Screen.现在,你可以有一个iPad版本的xib了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2867249次
积分:29028
积分:29028
排名:第114名
原创:244篇
译文:137篇
评论:1369条
阅读:28070
阅读:45800
阅读:51795
阅读:73557
阅读:127218
(5)(4)(4)(5)(4)(5)(5)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(5)(4)(5)(5)(6)(9)(5)(6)(4)(5)(5)(5)(5)(5)(4)(5)(5)(5)(6)(5)(3)(6)(5)(5)(6)(5)(6)(6)(3)(6)(8)(8)(5)(8)(8)(9)(4)(8)(10)(10)(10)(10)(11)(6)(4)(4)(8)(5)(5)(1)(3)(3)(1)(10)(2)(2)(1)(2)(2)ios xib连线
xib连线问题 Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key backButton.' 跳转问题, ...
1.File’s Owner为nil
UIView *demo1 = [[[NSBundle mainBundle] loadNibNamed:@&demo1& owner:nil options:nil] lastObject];
CGRect rect = demo1.
rect.origin.y = 100;
1.xib的通常的使用步骤 1.1 新建1个类,用来描述这个xib (假定继承自UIView,且类名是DIYView) 1.2 新建1个xib,文件名也是DIYView,往里面拖一个UIView,设置UIView的属性-Class为DIYView 1.3 往xib里拖1个的手势识别,鼠标右键刚刚拖进来的UIView,gesture Recognizer和刚才拖进来的手势识别 ...
在项目开发中,我们经常会碰到,某些视图View 内部基本空间都一样,只是数据不同,这时,我们可以用xib来将这个视图封装起来多次重用, (例如,大小固定 控件固定的TableViewCell) 这可以尽可能的加快我们的项目开发进度.
1.介绍一下xib的基本使用 A. xib中的File’s owner是告诉xib中的控件可以跟ViewController ...
Xib文件是一个轻量级的用来描述局部界面的文件,它与StoryBoard类似,都是使用Interface Bulider工具进行编辑.但是StoryBoard是重量级的,它是用来描述整个软件的多个界面,并且能够展示多个页面之间的跳转关系.在StoryBoard出现之前,一直是使用Xib文件表示界面.当然除了使用Xib文件,也可以直接使用代码来生成界面,无论哪种方式,都各自有 ...
在ios中,遇到一个关于tableview间隔线展示效果的问题,搜索了很多资料,终于找到解决方式.这个功能并不大,算是个小技巧 首先在你的.m文件中创建一个方法 - (void)setExtraCellLineHidden: (UITableView *)tableView {
UIView *view = [UIView new];
view.backgr ...
在我们的工作中很多时候使用拖控件的方式搭建一些界面,可以比较直观的将界面展现在你的眼前,也很方便,但是中间的关系以及拖线比较繁杂,一旦出现问题不太好找bug,但是实现一些相对简单的界面还是很方便的,下面就介绍一些简单是使用方法. 第一 :给控制器添加NavigationController 点击要设置控制器的第一个按钮 点屏幕上的Editor 然后点击Embed in 再点 ...
--类型:.storyboard or .xib: --结构:the dock and the canvas: --存储:stored by Xcode in XML format--&At build time, binary files known as nibs.--&At runtime, nibs are loaded and instantiated ...
今天code的时候,发现xib加载除了问题,研究了一会发现了一个问题 在连线的时候, object一定要选择,你连线的view,而不是 File's Owner
1.xib的基础知识: 1).xib = nib: 2).xib的加载: [[NSBundle mainBundle] loadNibName:@&rowView& ower:nil options:nil]; 2.xib 和storyboard 的异同: 1&.不同 *storyboard:描述软件界面,大范围,重量级,比较适合描述整个软件的所有 ...
1. 从xib的viewcontroll中启动storyboard 或者 从一个storyboard切换到另一个storyboard: [objc]– (IBAction)openStoryboard:(id)sender {UIStoryboard *secondStoryboard = [UIStoryboard storyboardWithName:@&Se ...
在xcode 5.0中 用xib编辑tableview有2种模式,见下图 其中,dynamic prototype 动态原型 表示tableview会询问它指定的 data source获取数据,如果不写,则报错.而static cells 表示可以不依赖指定的data source,创建一个固定的tableview样式,但是如果你制定了data source,并且实现了响 ...
1.在Cocoa Touch中创建ZYViewController视图控制器,在User Interface中创建一个view的bluleView.xib文件 2.点击bluleView.xib,然后Option+Command+3打开身份检查器,将默认的NSObject改成ZYViewController 3.在bluleView.xib中,按住Control键把File ...
Grand Central Dispatch(GCD)是一个强有力的方式取执行多线程任务,不管你在回调的时候是异步或者同步的,可以优化应用程序支持多核心处理器和其他的对称多处理系统的系统.开发使用的过程中只需要将执行的任务并添加到到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务.Dispatch Queue更简单而且在实现符合需求的多线程任务时 ...
根据/2012/04/drawing-smooth-lines-with-cocos2d-ios-inspired-by-paper/ 用cocos2d画线时出现闪烁问题 原有的画线部分放在CCLayer的draw函数里面 -(void)draw { [renderTexture begin]; 画线部分 [renderTex ...
应用程序代理类 WKAppDelegate.m // // WKAppDelegate.m // HelloWorld // // Created by easy5 on -18. // Copyright (c) 2013年 easy5. All rights reserved. // #import &WKAppDelegate.h& #im ...
事件描述: 用xib创建了一个View,里面有按钮,有TableView.我需要将数据在初始化时传递进去,方便TableView来显示信息. 首先想到的是awakeFromNib这个方法(我以为是和ViewDidLoad差不多的方法,后来发现差多了),在这个里面,将上一个界面的数据通过公共变量读取到.但是,公共变量的值为空.跟代码,我发现,当View使用nib在初始化时,就 ...
context画线 画直线 //获取view上下文所有画线方法的基础
CGContextRef context =UIGraphicsGetCurrentContext();
//改变线条颜色
CGContextSetStrokeColorWithColor(context, [UIColorgreenColor].CGColor);
转载自: /ios/4457.htmlAd-Hoc(iTunes安裝): Step1 進入iOS Dev Center,進入後點選Certificate / Distribution,點Request Certificate鈕. Step2 接著拉到下方,按選擇檔案,將之前所產生的Key載入,再按Sumbit鈕. Step3 過一回後 ...
创建项目,项目名称叫CompositeXib 创建MainView和ChildView,ChildView将作为子View包含到MainView中. 创建完成后是这样的: 设置ChildView的Size可以自定义,去掉状态栏: 设置大小: 添加控件:一个ImageView,一个Label和一个Button,添加完成后你的View应该是这样的: 添加ChildView ...

我要回帖

更多关于 ios怎么加载xib 的文章

 

随机推荐