# [ios]()
Native.js for iOS封裝一條通過JS語法直接調用Native Objective-C接口通道,通過plus.ios可調用幾乎所有的系統API。
### 方法:
- [importClass](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.importClass): 導入Objective-C類對象
- [newObject](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.newObject): 創建實例對象
- [deleteObject](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.deleteObject): 銷毀實例對象
- [invoke](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.invoke): 調用對象(類對象/示例對象)的方法
- [implements](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.implements): 實現代理的方法
- [currentWebview](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.currentWebview): 獲取當前Webview窗口對象的native層UIWebview實例對象
### 對象:
- [ClassObject](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.ClassObject): Objective-C類對象
- [InstanceObject](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.InstanceObject): Objective-C實例對象
### 權限:
permissions
~~~
"Invocation": {
"description": "Javascript橋"
}
~~~
# [importClass]()
導入Objective-C類對象
~~~
ClassObject plus.ios.importClass( String classname );
~~~
### 說明:
導入類對象后,就可以通過.操作符直接調用對象(類對象/實例對象)的常量和方法。 通過.操作符號調用方法時,不需要使用":"來分割參數。 注意:導入類對象將會消耗較多的系統資源,不應該導入過多的類對象,可以使用plus.ios.invoke()來調用未導入類實例對象的方法。
### 參數:
- classname: *( String ) 必選 *要導入的Objective-C類名
如果指定的類名不存在,則導入類失敗,不會拋出異常。
### 返回值:
ClassObject : Objective-C類對象,如果導入類對象失敗則返回null。
### 示例:
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>iOS Native.js</title>
<script type="text/javascript">
// 監聽plusready事件
document.addEventListener( "plusready", function(){
// 擴展API加載完畢,現在可以正常調用擴展API
// 導入GKLocalPlayer
var GKLocalPlayer = plus.ios.importClass("GKLocalPlayer");
}, false );
</script>
</head>
<body>
</body>
</html>
~~~
# [newObject]()
創建實例對象
~~~
InstanceObject plus.ios.newObject( String classname, Object..args );
~~~
### 參數:
- classname: *( String ) 必選 *要創建實例對象的類名
如果指定的類名不存在,則創建對象失敗,不會拋出異常。
- args: *( Object ) 可選 *創建實例對象的構造參數
如果指定的構造參數類型不區配,則創建對象失敗,不會拋出異常。
### 返回值:
InstanceObject : Objective-C實例對象,如果創建對象失敗則返回null。
### 示例:
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>iOS Native.js</title>
<script type="text/javascript">
// 監聽plusready事件
document.addEventListener( "plusready", function(){
// 擴展API加載完畢,現在可以正常調用擴展API
// 創建GKLocalPlayer類的一個實例對象
var localplayer = plus.ios.newObject("GKLocalPlayer");
}, false );
</script>
</head>
<body>
</body>
</html>
~~~
# [deleteObject]()
銷毀實例對象
~~~
void plus.ios.deleteObject( Object obj );
~~~
### 參數:
- obj: *( Object ) 必選 *要銷毀的實例對象
如果obj對象不是有效的實例對象,則不執行銷毀對象操作,不會拋出異常。 如果不執行銷毀實例對象操作,在頁面關閉時會自動執行銷毀對象的操作。
### 返回值:
void : 無
### 示例:
~~~
~~~
# [invoke]()
調用對象(類對象/示例對象)的方法
~~~
Object plus.ios.invoke( Object obj, String name, Object... args );
~~~
### 參數:
- obj: *( Object ) 必選 *調用方法所屬的對象,也可以是類的名稱
如果obj為類對象,則調用的是類的靜態方法;如果obj為實例對象,則調用的是實例的方法; 如果obj為字符串類型,其值必須是類的名稱,則調用的是類的靜態方法;
- name: *( String ) 必選 *要調用的方法名稱
方法名稱中使用":"分隔參數。 如果指定的方法名稱不存在,則調用方法失敗,不會拋出異常。
- args: *( Object ) 可選 *調用方法的參數
如果指定的參數數目或類型不區配,則調用方法失敗,不會拋出異常。
### 返回值:
Object : 調用方法的返回值,如果調用方法失敗,則返回null。
### 示例:
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>iOS Native.js</title>
<script type="text/javascript">
// 監聽plusready事件
document.addEventListener( "plusready", function(){
// 擴展API加載完畢,現在可以正常調用擴展API
// 創建UIAlertView類的實例對象
var view = plus.ios.newObject("UIAlertView");
// 設置提示對話上的內容,這里的方法名稱中必須包含':'字符
plus.ios.invoke(view,"initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:"
, "自定義標題" // 提示框標題
, "使用NJS的原生彈出框,可自定義彈出框的標題、按鈕" // 提示框上顯示的內容
, null // 操作提示框后的通知代理對象,暫不設置
, "確定(或者其他字符)" // 提示框上取消按鈕的文字
, null ); // 提示框上其它按鈕的文字,設置為null表示不顯示
// 調用show方法顯示提示對話框,在JS中使用()語法調用對象的方法
plus.ios.invoke(view,"show");
}, false );
</script>
</head>
<body>
</body>
</html>
~~~
# [implements]()
實現代理的方法
~~~
Object plus.ios.implements( String name, Object obj );
~~~
### 參數:
- name: *( String ) 必選 *代理的名稱,也可以是自定的字符串名稱
如果name為自定的字符串名稱,則自定義一個代理;
- obj: *( Object ) 必選 *JSON對象類型,代理實現方法的定義
JSON對象中key值為代理方法的名稱,使用":"分割參數;value值為Function,方法參數必須與代理方法中的":"區配。
### 返回值:
InstanceObject : 代理實例對象。
### 示例:
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>iOS Native.js</title>
<script type="text/javascript">
// 監聽plusready事件
document.addEventListener( "plusready", function(){
// 擴展API加載完畢,現在可以正常調用擴展API
// ...
}, false );
</script>
</head>
<body>
</body>
</html>
~~~
# [currentWebview]()
獲取當前Webview窗口對象的native層UIWebview實例對象
~~~
InstanceObject plus.ios.currentWebview();
~~~
### 參數:
無
### 返回值:
[InstanceObject](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.InstanceObject) : Webview窗口對象的native層實例對象,如果調用方法失敗,則返回null。
### 示例:
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>iOS Native.js</title>
<script type="text/javascript">
var nwv=null;
// 監聽plusready事件
document.addEventListener( "plusready", function(){
// 擴展API加載完畢,現在可以正常調用擴展API
// ...
}, false );
</script>
</head>
<body>
</body>
</html>
~~~
# [ClassObject]()
Objective-C類對象
~~~
interface ClassObject {
// ...
function Object plusGetAttribute( String name );
function Object plusSetAttribute( String name, Object value );
// ...
}
~~~
### 說明:
Objective-C類對象,可通過其屬性獲取類的常量,可通過方法來操作類的靜態變量和方法,也通過new方法來創建類的實例對象。 對于類的常量,則直接通過.后面跟隨常量名稱調用即可。
### 方法:
- [plusGetAttribute](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.ClassObject.plusGetAttribute): 獲取Objective-C類對象的靜態屬性
- [plusSetAttribute](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.ClassObject.plusSetAttribute): 設置Objective-C類對象的靜態屬性
# [plusGetAttribute]()
獲取Objective-C類對象的靜態屬性
~~~
Object clsobj.plusGetAttribute( String name );
~~~
### 參數:
- name: *( String ) 必選 *要獲取的靜態屬性名稱
如果指定的屬性名稱不存在,則返回null。
### 返回值:
Object : 靜態屬性實例對象
### 示例:
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>iOS Native.js</title>
<script type="text/javascript">
// 監聽plusready事件
document.addEventListener( "plusready", function(){
// 擴展API加載完畢,現在可以正常調用擴展API
// ...
}, false );
</script>
</head>
<body>
</body>
</html>
~~~
# [plusSetAttribute]()
設置Objective-C類對象的靜態屬性
~~~
void clsobj.plusSetAttribute( String name, Object value );
~~~
### 參數:
- name: *( String ) 必選 *要設置的靜態屬性名稱
如果指定的屬性名稱不存在,則操作不生效,不會拋出異常。
- value: *( Object ) 必選 *要設置的靜態屬性值
如果指定的屬性值類型不區配,則操作不生效,不會拋出異常。
### 返回值:
void : 無
### 示例:
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>iOS Native.js</title>
<script type="text/javascript">
// 監聽plusready事件
document.addEventListener( "plusready", function(){
// 擴展API加載完畢,現在可以正常調用擴展API
// ...
}, false );
</script>
</head>
<body>
</body>
</html>
~~~
# [InstanceObject]()
Objective-C實例對象
~~~
interface InstanceObject {
// ...
function Object plusGetAttribute( String name );
function Object plusSetAttribute( String name, Object value );
// ...
}
~~~
### 說明:
Objective-C實例對象,可通過其方法來操作示例的變量和方法。 注意:必須通過plusGetAttribute()方法讀取示例對象的屬性值,通過plusSetAttribute()方法設置示例對象的屬性值。
### 方法:
- [plusGetAttribute](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.InstanceObject.plusGetAttribute): 獲取Objective-C實例對象的屬性
- [plusSetAttribute](http://www.dcloud.io/docs/api/zh_cn/ios.shtml#plus.ios.InstanceObject.plusSetAttribute): 設置Objective-C示例對象的屬性
# [plusGetAttribute]()
獲取Objective-C實例對象的屬性
~~~
Object insobj.plusGetAttribute( String name );
~~~
### 參數:
- name: *( String ) 必選 *實例屬性的名稱
如果指定的屬性名稱不存在,則返回null。
### 返回值:
Object : 屬性的實例對象
### 示例:
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>iOS Native.js</title>
<script type="text/javascript">
// 監聽plusready事件
document.addEventListener( "plusready", function(){
// 擴展API加載完畢,現在可以正常調用擴展API
// ...
}, false );
</script>
</head>
<body>
</body>
</html>
~~~
# [plusSetAttribute]()
設置Objective-C示例對象的屬性
~~~
void insobj.plusSetAttribute( String name, Object value );
~~~
### 參數:
- name: *( String ) 必選 *要設置的屬性名稱
如果指定的屬性名稱不存在,則操作不生效,不會拋出異常。
- value: *( Object ) 必選 *要設置的屬性值
如果指定的屬性值類型不區配,則操作不生效,不會拋出異常。
### 返回值:
void : 無
### 示例:
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>iOS Native.js</title>
<script type="text/javascript">
// 監聽plusready事件
document.addEventListener( "plusready", function(){
// 擴展API加載完畢,現在可以正常調用擴展API
// ...
}, false );
</script>
</head>
<body>
</body>
</html>
~~~
- API參考
- Accelerometer
- Audio
- Camera
- Contacts
- Device
- Downloader
- Events
- Gallery
- Geolocation
- IO
- Key
- Messaging
- NativeUI
- Navigator
- Orientation
- Proximity
- SplashScreen
- Storage
- UI
- Uploader
- InterfaceOrientation
- Runtime
- WebView
- XMLHttpRequest
- Zip
- Plugins
- Barcode
- Maps
- Payment
- Push
- Share
- Speech
- Statistic
- Native.js
- Android
- iOS