JSPath

来源:http://www.cnblogs.com/hxwj/archive/2016/01/27/5163158.html
-Advertisement-
Play Games

JSPath(用JS更新OC代碼)臨時修複一些BUG需要這個方案庫:https://github.com/bang590/JSPatch工具: http://bang590.github.io/JSPatchConvertor/官網:http://jspatch.com下麵是我用js代碼寫的app的...


JSPath(用JS更新OC代碼)

臨時修複一些BUG需要這個方案

庫:https://github.com/bang590/JSPatch

工具: http://bang590.github.io/JSPatchConvertor/

官網:http://jspatch.com

 

下麵是我用js代碼寫的app的一些類和方法

//defineClass重新定義現有的類並且覆蓋方法

//tips:我的使用方式,使用oc-js轉換工具轉換之後再微調,不然那些類的方法好難記住

//方法和方法之間需要用逗號隔開
require('UIAlertView')//需要使用該類就需要導入
defineClass('MainControl:<UIAlertViewDelegate>', {
    
    //這裡覆蓋了生命周期的一個方法,讓它列印一個信息
    viewWillAppear: function(animated) {
        self.super().viewWillAppear(animated);
        console.log('生命周期-視圖將要顯示')
    },
    
    //這裡覆蓋了oc中的showText使其調用為空
    showText: function() {
            
    },
            
    //按鈕點擊監聽事件
    handleBtn: function(sender) {
        console.log('測試1111')
        var testString = "測試的字元串"
        console.log('click btn ' + testString)
        
        //初始化一個alertView
        var temAlertView = UIAlertView.alloc().
        initWithTitle_message_delegate_cancelButtonTitle_otherButtonTitles("提示","點擊進入自定義列表控制器", self, "確定", null);
        temAlertView.show()
            
    },
    //alertView的代理
    alertView_willDismissWithButtonIndex: function(alertView, idx) {
        //控制器跳轉
        var control = CustomTableControl.alloc().init();
        self.navigationController().pushViewController_animated(control, YES)
    }
})

//我自己創建一個控制器(自定義列表控制器)
require('UITableViewCell')
defineClass('CustomTableControl: UITableViewController', {
            
            //生命周期
            viewDidLoad: function() {
                self.super().viewDidLoad();
                self.setTitle("列表");
                self.tableView().registerClass_forCellReuseIdentifier(UITableViewCell.class(), "cellID");
            },
            //代理
            tableView_numberOfRowsInSection: function(tableView, section) {
                return 10;
            },
            
            tableView_cellForRowAtIndexPath: function(tableView, indexPath) {
                //創建cell
                var cell = tableView.dequeueReusableCellWithIdentifier("cellID");
                cell.textLabel().setText("text");
                return cell;
            },
            tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {
                var control = CustomDeatilControl.alloc().init();
                self.navigationController().pushViewController_animated(control, YES)
            },
})

require('UIColor,UIView');
//自己創建的一個視圖控制器
defineClass('CustomDeatilControl: UIViewController', {
            
            //生命周期
            viewDidLoad: function() {
                self.super().viewDidLoad();
                self.setTitle("詳情");
                self.view().setBackgroundColor(UIColor.redColor());
            //frame初始化要這種格式 UIView.alloc().initWithFrame({x:20, y:20, width:100, height:100});
                var view = UIView.alloc().initWithFrame({x:100, y:100, width:100, height:100});
                view.setBackgroundColor(UIColor.blackColor());
                self.view().addSubview(view);
            },
})

 

效果圖:

 

 

一般情況下我們照著下麵方法的使用,已經能處理很多事情了

//require
require('UIView, UIColor, UISlider, NSIndexPath')

// Invoke class method
var redColor = UIColor.redColor();

// Invoke instance method
var view = UIView.alloc().init();
view.setNeedsLayout();

// set proerty
view.setBackgroundColor(redColor);

// get property 
var bgColor = view.backgroundColor();

// multi-params method (use underline to separate)
// OC:NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:1];
var indexPath = NSIndexPath.indexPathForRow_inSection(0, 1);

// method name contains underline (use double undeline to represent)
// OC: [JPObject _privateMethod];
JPObject.__privateMethod()

// use .toJS() to convert NSArray / NSString / NSDictionary to JS type.
var arr = require('NSMutableArray').alloc().init()
arr.addObject("JS")
jsArr = arr.toJS()
console.log(jsArr.push("Patch").join(''))  //output: JSPatch

// use hashes to represent struct like CGRect / CGSize / CGPoint / NSRange
var view = UIView.alloc().initWithFrame({x:20, y:20, width:100, height:100});
var x = view.bounds().x;

// wrap function with `block()` when passing block from JS to OC
// OC Method: + (void)request:(void(^)(NSString *content, BOOL success))callback
require('JPObject').request(block("NSString *, BOOL", function(ctn, succ) {
  if (succ) log(ctn)
}));

// GCD
dispatch_after(function(1.0, function(){
  // do something
}))
dispatch_async_main(function(){
  // do something
})

 

推薦使用oc轉js代碼和自己改進細節方法使用,提高效率

demo鏈接:http://pan.baidu.com/s/1skcIKVz


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 昨天花了一下午的時間研究了下極光推送,也前也是沒做過,不知道從何下手!才開始的時候一看官方的SDK感覺好難,不過經過一系列的搗鼓之後,手機收到了推送信息,感覺其實並沒有那麼難! 1.配置開發證書(得有開發者賬號,個人,企業的都可以) 開發環境測試 在對 JPush iOS 開發環境進行測試前,請確保
  • 我們經常需要把一個數字轉成字元串,當你不需要配合其他字元串的時候可以用description. 1 /** 2 description屬於NSObject 3 值是NSNumber時候,不用stringWithFormate來轉化成字元串了.簡便得多 4 在解析/賦值的時候比較有用,當我們需要NSS
  • public class ButtonUtils { private static long lastClickTime; public synchronized static boolean isFastClick() { long time = System.currentTimeMillis(
  • 在上文,我們介紹了ios開發中的其中2種數據持久化方式:屬性列表、歸檔解檔。本節將繼續介紹另外2種iOS持久化數據的方法:資料庫 SQLite3、Core Data 的運用; 在本節,將通過對4個文本框內容的創建、修改,退出後臺,再重新回到後臺,來認識這兩種持久化數據的方式。效果圖如下【圖1】: 【
  • 前言 需要開發者在本地上使用openssl來生成私鑰和公鑰 由於mac 自帶openssl工具,所以不用像windows那樣要下載安裝openssl工具 步驟 1.創建一個文件夾,終端進入該文件夾 cd /Users/tanqihong/Desktop/rsa 2.終端輸入openssl打開工具 3
  • md5方法: 1.導入頭文件 #import <CommonCrypto/CommonDigest.h> 2.寫下麵的方法 - (NSString *)md5_32bit:(NSString *)input; 1).傳入的參數必須是字元串,NSData 可以轉成字元串. 2).得到的結果就是32個字
  • 一、關於記憶體警告ios6中廢除了viewDidUnload,viewWillUnload這兩個系統回調,收到記憶體警告時在didReceiveMemoryWarning中進行相關的處理。 二、關於屏幕旋轉同樣ios6 廢除了shouldAutorotateToInterfaceOrientation這
  • 觸摸事件 iOS中的事件: 在用戶使用app過程中,會產生各種各樣的事件。iOS中的事件可以分為3大類型: view的觸摸事件處理: 響應者對象: 在iOS中不是任何對象都能處理事件,只有繼承了UIResponder的對象才能接收並處理事件。我們稱之為“響應者對象”。 UIApplication、U
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...