2013-04-15 70 views
0

我想在iOS中添加一個正確的導航按鈕到鈦中的窗口。Appcelerator鈦,獲取當前窗口和應用屬性不工作

該代碼只是由Titanium提供的原始「主/明細」起始模板,然後在MasterView.js中,我嘗試嚮導航欄添加一個按鈕。

但它不工作,像它應該:

var addBtn = Ti.UI.createButton({ 
    systemButton:Ti.UI.iPhone.SystemButton.ADD 
}); 
//self.setRightNavButton(addBtn); 
var win1 = Titanium.UI.currentWindow; 
win1.setRightNavButton(addBtn); 

這失敗,出現錯誤:

[ERROR] : Script Error = 'undefined' is not an object (evaluating 'win1.setRightNavButton') at MasterView.js (line 14).

我如何添加此按鈕,導航欄呢?我見過一些例子,但是他們都依賴於聲明瞭navbar。在這種情況下,這是不可能的,因爲Titanium在特定於每個平臺的AplicationWindow.js中聲明瞭導航欄,然後調用MasterView.js函數和文件來定義導航欄按鈕。

+0

比使用'currentWindow'更好地保持對窗口的引用。直到今天,我還沒有想出如何以及何時使用它,如果它工作。 –

+0

那麼,我最終創建了一個簡單的項目,並通過指向它的JavaScript文件名的函數調用每個窗口。似乎有點古老,但它現在起作用。 – jbssm

回答

0

Ti.UI.currentWindow只能工作如果有窗口已經打開。您擁有的錯誤來自您在創建MasterView時尚未打開窗口的事實。

查看ApplicationWindow.js,你會發現你甚至在打開窗口之前創建了主視圖。

如果要設置導航欄項目,請將它們添加到ApplicationWindow,app.js中,或將窗口傳遞給MasterView。

+0

但是通過在ApplicationWindow中添加它們,我必須爲每個平臺創建不同的代碼,因爲有許多特定於所有平臺的ApplicationWindow.js文件。 我訴諸於只使用一個非常簡單的項目,我在每個窗口只有一個文件適用於所有平臺。這不是一個理想的解決方案,而是爲每個平臺編寫不同的代碼或爲所有平臺編寫代碼的最簡單的選擇,後者處理每個平臺的實現之間的差異。 – jbssm

+0

有很多選項,答案的重點在於顯示Ti.UI.currentWindow只有在窗口已經打開的情況下才起作用。它回答你的問題。 –

0

Ti.UI.currentWindow僅在使用參數url打開窗口時纔有效。在這種情況下,由url參數引用的控制器將將Ti.UI.currentWindow屬性設置爲該窗口。

相關問題