KXJsonUI 0.8.4

KXJsonUI 0.8.4

测试已测试
语言语言 Objective C++Objective C++
许可证 MIT
发布上次发布2017年3月

Kevin Liu 维护。



KXJsonUI 0.8.4

  • kxzen

KXJsonUI 是一个用于 iOS 的 JSON 布局框架,它允许您使用 JSON 文件来构建用户界面。您可以在不使用界面构建器的情况下构建您的 UI。KXJsonUI 利用与 Android 布局管理类似的理念。使用本框架,所有 UI 布局都可以使用 KXLinearLayout 类来安排。

特性

  • 使用 JSON 文本文件创建和管理 UIView
  • 支持相对布局和线性布局
  • 支持旋转
  • 支持 UITableViewCell 和 UICollectionViewCell
  • 支持添加未知视图类
  • 支持动态更改布局

要求

需要 iOS 8.0+ 和 ARC。

安装

传统方式

  • KXJsonUI_ios/KXJsonUI_ios/ 的所有子文件夹和 *.h, *.m, *.mm 文件添加到您的项目中。
  • QuartzCore.framework 添加到您的链接框架中。
  • 在您想要使用框架的地方导入 #import "KXJsonUI_ios.h"

用法

包含头文件

#import <KXJsonUI_ios/KXJsonUI_ios.h>

从 JSON 文件加载 UI

从 JSON 文件加载 UI 布局很容易。假设您要加载的 JSON 文件命名为 helloworld.json。请确保已将该文件添加到项目中。

使用 KXBuilder 从 JSON 文件解析和构建 UI 布局。

在您的ViewController.h文件中添加一个类型为 KXBuilder* 的属性。

@property(nonatomic, strong) KXBuilder *builder;

在您的ViewController.m中的-(void)viewDidLoad方法中加载 JSON 文件

- (void)viewDidLoad {
    [super viewDidLoad];

    self.builder = [[KXBuilder alloc] init];
    if( [self.builder loadFileWithName: @"helloworld.json"] ){
        [self.builder buildLayoutInView:self.view];
    }
}

这就是所有!启动视图控制器,您可以看到所有 UIView 都根据 JSON 文件的內容构建。

关于布局结构的详细信息

视图控制器中的 UIView 可以在 JSON 文件中写入。布局文件的基本结构如下所示,

{  
  "layout": {    
      "name": "root",
      "widget": "CLASS_NAME_OF_A_UIVIEW_CLASS",      
      "attr": [
        {
          "name": "size",
          "value": {
            "width": "match_parent",
            "height": "match_parent"
          }
        }        
      ],
      "subviews": [         
      ]
  }
}

所有UIView都表示在一个嵌套结构中。布局的根视图必须命名为rootwidget属性值是UIView类的类名。例如,widget的值可以是以下类之一:UIViewUIButtonUILabel等。

attr的值是一个数组,包含一个或多个视图的属性。每个属性都表示为一个namevalue对。例如,可以在attrs中配置颜色、大小和其他属性。

subviews的值是一个数组,包含其子视图的属性。任何视图都可以有零个或多个子视图。

根视图的widget值通常等于KXLinearLayoutKXRelativeLayout。在大多数情况下,我们使用这些类来管理不同屏幕尺寸下的视图。

示例

这是一个简单的视图控制器示例,包含一个标签和两个按钮。

示例JSON文件

{  
  "layout": {    
      "name": "root",
      "widget": "KXLinearLayout",      
      "attr": [
        {
          "name": "size",
          "value": {
            "width": "match_parent",
            "height": "match_parent"
          }
        },
        {
          "name": "orientation",
          "value": "vertical"
        },
        {
          "name": "color",
          "value": "#ffffff"
        }
      ],
      "subviews": [
        {
          "name": "label1",
          "widget": "UILabel",
          "attr": [
            {
              "name": "size",
              "value": {
                "width": "match_parent",
                "height": "auto"
              }
            },
            {
              "name": "color",
              "value": "yellow"
            },
            {
              "name": "weight",
              "value": 1
            },
            {
              "name": "text",
              "value": "Hello! This is label1!"
            },
            {
              "name": "text_color",
              "value": "#202020"
            },
            {
              "name": "margins",
              "value": {
                "left": "4dp",
                "top": "4dp",
                "right": "4dp",
                "bottom": "4dp"
              }
            }            
          ]
        }
     ]    
  }
}

上述示例描述了一个类型为KXLineLayout的根视图及其子视图label1UILabel类型。KXLinearLayout与Android中的LinearLayout类似。KXLinearLayout的子视图会根据orientationweight属性进行排列。

更多示例

我正在努力提供更多文档和教程。如果您想了解更多关于此框架的信息,建议您查看KXJsonUIDemo项目中的示例。

Screenshot

许可证

KXJsonUI基于MIT许可证条款授权。请参见LICENSE文件以获取详细信息。

这个框架目前仍在开发中。如果您有任何建议,我非常愿意倾听。