在本文中,我们将给您介绍关于swift3.0中使用xib的详细内容,并且为您解答swift5.3教程的相关问题,此外,我们还将为您提供关于Cocoa应用程序没有MainMenu.xib、iOSstor
在本文中,我们将给您介绍关于swift 3.0 中使用 xib的详细内容,并且为您解答swift5.3教程的相关问题,此外,我们还将为您提供关于Cocoa应用程序没有MainMenu.xib、iOS storyborad 与 xib 的几点对比、iOS xib 嵌套复用、ios – ViewController_iPad.xib vs ViewController~ipad.xib的知识。
本文目录一览:- swift 3.0 中使用 xib(swift5.3教程)
- Cocoa应用程序没有MainMenu.xib
- iOS storyborad 与 xib 的几点对比
- iOS xib 嵌套复用
- ios – ViewController_iPad.xib vs ViewController~ipad.xib
swift 3.0 中使用 xib(swift5.3教程)
文章写于2016年9月底,Xcode 8,swift 3.0
真是蛋疼,折腾了很长时间,试了网上很多教程,结果又莫名的可以了!
1.方法和OC中一样
将一个xib文件和一个ViewController类进行关联的几步操作:
command + n
创建
一个新的文件,选择 User Interface - View 或者 Empty。如果选择的是 Empty 就需要在xib文件中,自己创建一个View。
将xib文件和ViewController类进行
绑定
,点击左上角的 File''s Owner,在右边的选项的中的第三个选项卡的第一个栏目中写入需要绑定的类名。将xib中的view和self.view进行
关联
,按住control 从File''s Owner连线到view。
或者
在创建ViewController文件时,可以选择直接创建一个关联完毕的xib文件。默认已经帮你完成上面几步。
注: 当一个视图控制器类,有相关联的xib文件时(文件名相同),在执行内部loadView方法时,会自动的去读取xib
,所以这样就能实现了。
说明:以上方法和OC中完全一样,在swift项目中也一样可以实现。但是我第一次弄的时候莫名的出现问题,现在测试可以使用。网上的内容说还需要以下部分才能实现,个人测试以下的内容也需要在xib文件绑定和关联之后才可用。(个人觉得没必要,特定环境下需要以下内容)
2.在该类中复写 init
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
convenience init() {
var nibNameOrNil = String?("ViewController")//这里根据自己xib名
//考虑到xib文件可能不存在或被删,故加入判断
if Bundle.main.path(forResource: nibNameOrNil, ofType: "xib") == nil {
nibNameOrNil = nil
}
self.init(nibName: nibNameOrNil, bundle: Bundle.main)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
Cocoa应用程序没有MainMenu.xib
return NSApplicationMain(argc,(const char **)argv);
所以问题基本上是:如何在没有MainMenu.xib的情况下将应用程式委托给Cocoa应用程序?
解决方法
AppDelegate * delegate = [[AppDelegate alloc] init]; [[NSApplication sharedApplication] setDelegate:delegate]; [NSApp run];
至于返回值,可以使用EXIT_SUCCESS
iOS storyborad 与 xib 的几点对比
关于storyborad 与 xib的区别有很多现在简述下自己遇到的几点
1、cell的复用
cell 若要多个tableview复用,只能单独创建cell,不能在storyborad中布局cell,这样的话仅仅是当前table可用,别的不能复用
参考:http://stackoverflow.com/questions/9245969/in-a-storyboard-how-do-i-make-a-custom-cell-for-use-with-multiple-controllers
2、cell的创建
在storybord中tableview上可以直接布局cell,而在xib中tableview上不可以直接布局cell
3、添加scroview
关于添加scroview 之前xib不需要如此设置(16年初时), 现在xib,storyboard都需要
参考: http://www.cnblogs.com/zhun/p/5582049.html
4、layoutguid
storybord 普通VC有layoutguid,而xib没有。
所以storyboard可以选择参照layoutguid或者superview ,而xib只能选择superview。
参照layoutguid
自动调整到安全区但更改了frame。所以iOS7-11要关闭automaticallyAdjustsScrollViewInsets属性,但11之后UIScrollViewContentInsetAdjustmentAutomatic更加人性化,如果预留了高度就不会再自己更改(本质是因为safeareaInset的引入)
参照superview
iOS7-11自动调整到安全区但更改了contentinset,iOS11更改了safeareaInset.
iOS xib 嵌套复用
下面是小编 jb51.cc 通过网络收集整理的代码片段。
小编小编现在分享给大家,也给大家做个参考。
/** * 可复用组件.用于编写可嵌套的 xib 组件. * * 适用场景: 需要静态确定布局的页面内的UI元素的复用性问题. * 使用方法: 在xib或storyboard中,将某一用于占位的view的 custom class 设为对一个的 component,则初始化时,会自动使用此component同名的xib文件中的内容去替换对应位置. * 注意: 对于可动态确定布局的部分,如tableView中的cell,直接自行从xib初始化即可,不必继承于 MCComponent. */ @interface MCComponent : UIView @end
以上是小编(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给程序员好友。
ios – ViewController_iPad.xib vs ViewController~ipad.xib
这也发生在xCode 4.6中
谢谢.
解决方法
~iPhone让它正常工作.
两者在模拟器上都是一样的,但先前会在设备上丢弃.
请查找Apple参考文献iOS Supports Device-Specific Resources的摘录
iOS支持特定于设备的资源
在iOS 4.0及更高版本中,可以将各个资源文件标记为仅在特定类型的设备上可用.此功能简化了您必须为Universal应用程序编写的代码.您可以让捆绑加载例程选择正确的文件,而不是创建单独的代码路径来为iPhone加载一个版本的资源文件,为iPad加载不同版本的文件.您所要做的就是适当地命名您的资源文件.
要将资源文件与特定设备相关联,请在其文件名中添加自定义修饰符字符串.包含此修饰符字符串会产生具有以下格式的文件名:
.
该字符串表示资源文件的原始名称.它还表示从代码访问文件时使用的名称.同样,字符串是用于标识文件类型的标准文件扩展名.该字符串是区分大小写的字符串,可以是以下值之一:
~ipad - The resource should be loaded on iPad devices only. ~iphone - The resource should be loaded on iPhone or iPod touch devices only.
今天关于swift 3.0 中使用 xib和swift5.3教程的讲解已经结束,谢谢您的阅读,如果想了解更多关于Cocoa应用程序没有MainMenu.xib、iOS storyborad 与 xib 的几点对比、iOS xib 嵌套复用、ios – ViewController_iPad.xib vs ViewController~ipad.xib的相关知识,请在本站搜索。
本文标签: