如何将XIB文件转换为Object-C源程序呢?
使用nib2objc这么一个小工具就可以了,该工具的作者是akosma,你可以通过https://github.com/akosma/nib2objc下载到这个工具的源代码。
下载的工程代码并用XCode编译,生成一个命令行程序文件nib2objc。然后执行如下命令开始转换。
nib2objc 1.xib > 1.m
如果1.xib的内容如下:
<!--StartFragment -->
<?xmlversion="1.0"encoding="UTF-8"?>
<archivetype="com.apple.InterfaceBuilder3.CocoaTouch.XIB"version="7.10">
<data>
<intkey="IBDocument.SystemTarget">800</int>
<stringkey="IBDocument.SystemVersion">10C540</string>
<stringkey="IBDocument.InterfaceBuilderVersion">759</string>
<stringkey="IBDocument.AppKitVersion">1038.25</string>
<stringkey="IBDocument.HIToolboxVersion">458.00</string>
<objectclass="NSMutableDictionary"key="IBDocument.PluginVersions">
<stringkey="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<stringkey="NS.object.0">77</string>
</object>
<objectclass="NSMutableArray"key="IBDocument.EditedObjectIDs">
<boolkey="EncodedWithXMLCoder">YES</bool>
<integervalue="6"/>
</object>
<objectclass="NSArray"key="IBDocument.PluginDependencies">
<boolkey="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
<objectclass="NSMutableDictionary"key="IBDocument.Metadata">
<boolkey="EncodedWithXMLCoder">YES</bool>
<objectclass="NSArray"key="dict.sortedKeys"id="0">
<boolkey="EncodedWithXMLCoder">YES</bool>
</object>
<objectclass="NSMutableArray"key="dict.values">
<boolkey="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<objectclass="NSMutableArray"key="IBDocument.RootObjects"id="1000">
<boolkey="EncodedWithXMLCoder">YES</bool>
<objectclass="IBProxyObject"id="372490531">
<stringkey="IBProxiedObjectIdentifier">IBFilesOwner</string>
<stringkey="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<objectclass="IBProxyObject"id="843779117">
<stringkey="IBProxiedObjectIdentifier">IBFirstResponder</string>
<stringkey="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<objectclass="IBUIView"id="774585933">
<referencekey="NSNextResponder"/>
<intkey="NSvFlags">274</int>
<stringkey="NSFrameSize">{320,460}</string>
<referencekey="NSSuperview"/>
<objectclass="NSColor"key="IBUIBackgroundColor">
<intkey="NSColorSpace">3</int>
<byteskey="NSWhite">MC43NQA</bytes>
<objectclass="NSColorSpace"key="NSCustomColorSpace">
<intkey="NSID">2</int>
</object>
</object>
<boolkey="IBUIClearsContextBeforeDrawing">NO</bool>
<objectclass="IBUISimulatedStatusBarMetrics"key="IBUISimulatedStatusBarMetrics"/>
<stringkey="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
</object>
<objectclass="IBObjectContainer"key="IBDocument.Objects">
<objectclass="NSMutableArray"key="connectionRecords">
<boolkey="EncodedWithXMLCoder">YES</bool>
<objectclass="IBConnectionRecord">
<objectclass="IBCocoaTouchOutletConnection"key="connection">
<stringkey="label">view</string>
<referencekey="source"ref="372490531"/>
<referencekey="destination"ref="774585933"/>
</object>
<intkey="connectionID">7</int>
</object>
</object>
<objectclass="IBMutableOrderedSet"key="objectRecords">
<objectclass="NSArray"key="orderedObjects">
<boolkey="EncodedWithXMLCoder">YES</bool>
<objectclass="IBObjectRecord">
<intkey="objectID">0</int>
<referencekey="object"ref="0"/>
<referencekey="children"ref="1000"/>
<nilkey="parent"/>
</object>
<objectclass="IBObjectRecord">
<intkey="objectID">-1</int>
<referencekey="object"ref="372490531"/>
<referencekey="parent"ref="0"/>
<stringkey="objectName">File'sOwner</string>
</object>
<objectclass="IBObjectRecord">
<intkey="objectID">-2</int>
<referencekey="object"ref="843779117"/>
<referencekey="parent"ref="0"/>
</object>
<objectclass="IBObjectRecord">
<intkey="objectID">6</int>
<referencekey="object"ref="774585933"/>
<referencekey="parent"ref="0"/>
</object>
</object>
</object>
<objectclass="NSMutableDictionary"key="flattenedProperties">
<boolkey="EncodedWithXMLCoder">YES</bool>
<objectclass="NSArray"key="dict.sortedKeys">
<boolkey="EncodedWithXMLCoder">YES</bool>
<string>-1.CustomClassName</string>
<string>-2.CustomClassName</string>
<string>6.IBEditorWindowLastContentRect</string>
<string>6.IBPluginDependency</string>
</object>
<objectclass="NSMutableArray"key="dict.values">
<boolkey="EncodedWithXMLCoder">YES</bool>
<string>UntitledViewController</string>
<string>UIResponder</string>
<string>{{239,654},{320,480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
</object>
<objectclass="NSMutableDictionary"key="unlocalizedProperties">
<boolkey="EncodedWithXMLCoder">YES</bool>
<referencekey="dict.sortedKeys"ref="0"/>
<objectclass="NSMutableArray"key="dict.values">
<boolkey="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nilkey="activeLocalization"/>
<objectclass="NSMutableDictionary"key="localizations">
<boolkey="EncodedWithXMLCoder">YES</bool>
<referencekey="dict.sortedKeys"ref="0"/>
<objectclass="NSMutableArray"key="dict.values">
<boolkey="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nilkey="sourceID"/>
<intkey="maxID">7</int>
</object>
<objectclass="IBClassDescriber"key="IBDocument.Classes">
<objectclass="NSMutableArray"key="referencedPartialClassDescriptions">
<boolkey="EncodedWithXMLCoder">YES</bool>
<objectclass="IBPartialClassDescription">
<stringkey="className">UntitledViewController</string>
<stringkey="superclassName">UIViewController</string>
<objectclass="IBClassDescriptionSource"key="sourceIdentifier">
<stringkey="majorKey">IBProjectSource</string>
<stringkey="minorKey">Classes/UntitledViewController.h</string>
</object>
</object>
</object>
</object>
<intkey="IBDocument.localizationMode">0</int>
<stringkey="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
<objectclass="NSMutableDictionary"key="IBDocument.PluginDeclaredDevelopmentDependencies">
<stringkey="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
<integervalue="3100"key="NS.object.0"/>
</object>
<boolkey="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<stringkey="IBDocument.LastKnownRelativeProjectPath">Untitled.xcodeproj</string>
<intkey="IBDocument.defaultPropertyAccessControl">3</int>
<stringkey="IBCocoaTouchPluginVersion">77</string>
<nilkey="IBCocoaTouchSimulationTargetRuntimeIdentifier"/>
</data>
</archive>
执行转换后的源代码如下:
UIView *view6 = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 460.0)];
view6.frame = CGRectMake(0.0, 0.0, 320.0, 460.0);
view6.alpha = 1.000;
view6.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
view6.backgroundColor = [UIColor colorWithWhite:0.750 alpha:1.000];
view6.clearsContextBeforeDrawing = NO;
view6.clipsToBounds = NO;
view6.contentMode = UIViewContentModeScaleToFill;
view6.hidden = NO;
view6.multipleTouchEnabled = NO;
view6.opaque = YES;
view6.tag = 0;
view6.userInteractionEnabled = YES;
从试验的结果看,只能转换VIEW(包括UIVIEW的子类)相关的东西,而且控件和其对应事件的联系丢失。
而且转换后所有的属性的设置都会生成相应的Objective-C代码,不论是否属性值本身是缺省的。
分享到:
相关推荐
使用这些工具时,你需要导入Xib文件,然后选择目标语言(这里是Objective-C),工具会自动生成代码并提供下载。这种方式虽然简单,但可能无法满足所有需求,因为某些高级特性可能无法完全转换。 转换后的Objective...
nib2objc是一个小巧的转换工具,可以将XIB文件自动转换为Objective-C的源代码文件。 通常,考虑到程序的效率时,才将XIB直接转换为源代码文件。但是这样一来,通过Interface Builder设定的实例变量与行为方法的接续...
这意味着你可以使用Storyboard和XIB文件来创建用户界面,就像使用Objective-C一样。 **指明属性特性** 在Swift中定义Objective-C兼容的属性时,需要使用`@objc`属性装饰器来指明该属性可以被Objective-C访问。 **...
- **与Interface Builder集成**:Swift代码可以与Storyboard和XIB文件中的界面元素进行交互。 - **处理IBOutlet和IBAction**:Swift支持IBOutlet和IBAction,允许Swift代码与UI元素进行交互。 - **实时渲染**:...
`swift-xib2Storyboard`是一个工具,旨在帮助开发者将现有的XIB文件转换为Storyboard文件,从而方便在Storyboard环境中统一管理UI。 标题"swift-xib2Storyboard-将Xcode.xib转换为.storyboard文件的工具"明确指出了...
nib2objc工具是一款针对iOS开发的实用小工具,它的主要功能是将.xib或.storyboard文件转换为Objective-C代码,方便开发者快速地将界面设计与代码实现相结合。在这个过程中,nib2objc能够帮助开发者节省大量的手动...
nib2objc是一个开源工具,主要用于将Apple的Interface Builder(IB)文件转换为Objective-C代码,以便在Xcode项目中方便地使用。这个工具对于iOS和macOS开发者来说尤其有用,因为它自动化了手动编写代码来加载界面的...
在解压后,开发者通常会找到.m(Objective-C源代码文件)和.mex文件(MATLAB编译的C/C++代码),以及可能的.xib或.storyboard文件(用户界面设计文件)。 在实际应用中,这样的示例可能有助于开发者学习如何在iOS...
通过将 nib 转换为 xib,开发者可以利用xib文件的优势,如XML格式的可读性,以及与Interface Builder的更好集成,这有助于提升开发效率和代码质量。如果你的项目中有大量的 nib 文件需要管理和更新,那么这个工具...
在用户界面方面,客户端可能利用UIKit框架提供的各种控件,如UITableView和UICollectionView来展示数据列表,同时结合Storyboard或XIB文件进行界面布局。此外,通知机制(NSNotification)和KVO(Key-Value ...
iOS应用通常使用Storyboard或XIB文件来设计界面,这些文件定义了UI元素的布局和交互。在这个源码中,可能包含了一个表格视图(UITableView)用于展示城市列表,用户可以通过滚动选择城市。每个单元格...
而Storyboard则是一系列Xib文件的集合,可以用来构建整个应用程序的流程和屏幕转换。 在iOS 11及以后的版本中,引入了“安全区域”(Safe Area)的概念。安全区域是指屏幕中不受硬件边框、刘海屏、Home Indicator等...
Xamarin会将Xib转换为C#代码,使得C#开发者也能享受到类似Objective-C或Swift的界面设计体验。通过Xamarin的绑定机制,可以轻松地将Xib中的控件与C#类进行绑定,实现事件处理和数据交互。 总的来说,Xamarin中的Xib...
- 所有的Objective-C代码最终都转换为Runtime API调用。 - **Runtime功能**: - 获取类的所有成员变量。 - 动态产生类、成员变量和方法。 - 动态修改类、成员变量和方法。 - 方法交换(Swizzling):交换两个...
3. 资源文件:可能包括图片、图标、故事板(Storyboard)或XIB文件,用于构建应用的用户界面。 4. Podfile:如果项目使用了CocoaPods管理依赖,那么会有这个文件,列出了所依赖的高德地图SDK及其他库。 5. Podfile....
Storyboard提供了一种可视化的方式,可以在单个文件中组织整个应用程序的多个视图控制器和它们之间的转换,而XIB文件通常用于设计单个视图控制器的界面。这部分教程会指导初学者如何有效地使用这两种工具来设计和...
它们包含UI元素的布局信息,如按钮、标签、视图等,并且可以与Swift或Objective-C代码进行绑定,实现动态交互。 在Python环境中,`ios-xib-generator`提供了一个命令行接口,开发者可以编写JSON结构来描述所需的...
压缩包中的"Oh-My-Cal-master"很可能包含了项目的所有源代码,包括.m(Objective-C源文件)和.h(头文件),以及可能的.xib或.storyboard文件,用于定义用户界面。开发者可以通过阅读这些文件了解项目的具体实现。 ...
加载XIB文件后,其内容会被转换成应用程序可操作的对象。 - **开发方式**:包括代码创建和XIB文件创建两种方式。 - **Interface Builder**:用于创建XIB文件的可视化设计环境。 #### 七、首个应用程序示例 - **...
Storyboard或XIB文件定义了UI元素的交互和视觉效果。 10. **测试与调试**:iOS应用开发过程中,单元测试和集成测试是关键。Xcode内置了XCTest框架,开发者可能通过编写测试用例来验证代码功能。 11. **性能优化**...