Weex 學習與實踐(二):iOS 整合的 tips

發表於2016-12-09

Weex學習與實踐(一):Weex,你需要知道的事

Weex學習與實踐(二):iOS整合的tips

Weex學習與實踐(三):iOS原理篇

本文主要介紹包括iOS上整合Weex、iOS上擴充套件元件、iOS上擴充套件module

iOS上整合Weex

整合weex,需要WeexSDK、WXDevtool兩個庫以及阿里未開源的ATSDK-Weex。

目前官方的alibaba/Weex倉庫裡面

它們直接使用的weex倉庫的sdk,但是weex主倉庫的WXDevtool已經不維護了,需要替換成,weexteam/weex-devtool-iOS的程式碼。

另外也可以直接從cocoapods的源pod倉庫,但是cocoapods的源都是打包成framwork,很多檔案並沒有設定為public,所以導致很多標頭檔案沒有暴露出來。

當然你也可以不用通過cocoapods整合,直接把程式碼拉進工程就可以,如果發生 Unknown type name 'NSString'

你可能需要把layout.c檔案右側的type改為Objective-C Source,或者直接修改為layout.m。

基本上JS頁面是在WXDemoViewController工作的,你可能需要接收頁面重新整理的通知,以支援實時重新整理 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationRefreshInstance:) name:@"RefreshInstance" object:nil];

頁面會維護一個WXSDKInstance例項,WXSDKInstance就是weex渲染的例項物件,提供了很多頁面渲染相關的介面,比如renderWithURL、refreshInstance、destroyInstance等

weex SDK 整合到工程 (integrate to ios)

Weex iOS SDK 整合指南

iOS上擴充套件元件

目前官方iOS這一塊元件的程式碼在WeexSDK的component裡面,元件有限,只有image,list,scroller等,如果想要實現自己的元件,首先需要繼承WXComponent類。

然後實現方法

注意這個方法不在主執行緒,這裡面接收一些js傳過來的引數,以在js端寫的image標記為例子

到objc端就是

ref(結點的唯一識別符號)

然後在loadView的時候可能需要返回自己的objc元件

然後你可以通過複寫addEvent方法來增加一個change(UIControlEventValueChanged)、click(UIControlEventTouchUpInside)等事件

如果是image元件的話,你可能需要接收圖片地址,這個時候需要通過實現了WXImgLoaderProtocol的WXImgLoaderDefaultImpl來處理,WXImgLoaderDefaultImpl實現了downloadImageWithURL方法,這裡面通過SDWebImage來下載一張圖片。

iOS 擴充套件 (extend to ios)

iOS上擴充套件module

這一塊的程式碼在module分組裡面,包括網路庫stream,持久化storage等,你可以擴充套件自己module。

需要做的是實現WXModuleProtocol協議,並且寫自己的方法就可以了,這裡需要通過weex的巨集把需要public的方法匯出

在module中目前是沒有view的,但是你可以通過由js傳過來的ref值拿到

注意點

1.如果設定js檔案在bundle中載入的話,需要把build的js檔案拖入工程,如果的你的we裡面一開始就呼叫了js檔案,由於只會buildwe檔案,所以還需要把之前的js檔案拖入工程,另外examples裡面判斷iOSAssets是這樣的

你如果拖入自己的工程需要把WeexDemo.app的判斷去掉

 

相關文章