當前位置:成語大全網 - 書法字典 - Ios開發憤怒的小鳥Lua語言:Wax框架詳解(二)

Ios開發憤怒的小鳥Lua語言:Wax框架詳解(二)

在《憤怒的小鳥:Wax框架詳解》開發Lua語言中介紹了Wax及其優勢。在本文中,我們首先為您準備了Wax框架的下載包。妳可以下載Wax,和我們壹起完成用Wax構建壹個簡單應用程序的過程。

這個應用程序顯示了Twitter上當前熱門話題的列表,您可以使用按鈕來更新內容。當整個過程完成後,也許壹個想法就能讓妳開發出自己的憤怒的小鳥。最終結果:

步驟1:分析AppDelegate.lua

如果查看當前的AppDelegate.lua,您會註意到幾個方面。首先,您會註意到這個Lua文件的第壹行。這壹行是Objective-C類聲明。我們創建了壹個名為“AppDelegate”的類,它符合“UIApplocationDelegate”協議。接下來,您將看到文件中唯壹的方法:“applicationDidFinishLaunching”。每次應用程序啟動時都會調用這個著名的方法。應用程序現在可以在屏幕上顯示內容。“applicationDidFinishLaunching”中的代碼基本不需要解釋。它創建壹個藍色背景的新窗口,然後在上面放壹些白色文本。然而,我們需要的是壹個Twitter客戶端,而不是“妳好Lua!”屏幕。讓我們從創建UITableViewController開始。

第二步:熟悉UITableViewController

在腳本目錄下新建壹個名為“TwitterViewController.lua”的文件。如果妳有好的記憶力,妳會記得為了聲明壹個新的Objective-C類,我們需要使用waxClass函數。如果妳記性好,妳會記得waxClass是這樣工作的:

waxClass{"CLASSNAME "," PARENT_CLASS"}

我們需要擴展UITableViewController的壹個類,所以看起來是這樣的:

wax class { " TwitterViewController ",UITableViewController}

現在我們已經定義了類,我們將處理初始化。在我們的“init”方法中,我們默認將表設置為“grouped ”,而不是“plain”。因為我們還想顯示趨勢表,所以有必要初始化包含所有趨勢的Lua表:

function init(self)self . super:init with style(UITableViewStyleGrouped)self . trends = { } return self end

基本上不需要解釋。

第三步:準備表格。

現在我們有了壹個分組表,我們需要壹個標題。我們使用“viewDidLoad:”方法來實現這壹步。

functionviewDidLoad(self)self:setTitle(" MyFirstWaxApplication ")self:table view():setallowselection(false)end

這根本不需要解釋。我們只是將標題放在屏幕頂部的欄上,然後阻止用戶選擇表中的任何行。我們不希望用戶選擇任何行,因為我們不想處理這個操作。妳可以在蘋果的UITableViewController文檔頁面上看到還能調用哪些方法。請記住:您必須使用“:property()”和“:setProperty(value)”方法,而不是屬性。按Xcode左上角的“運行”,應用程序應該是這樣的:

步驟4: UITableViewController數據方法

我們的應用程序可以啟動,這很好,但是我們希望顯示壹些數據。為了顯示這些數據,所有UITableViewController都必須實現幾個方法來告訴設備要顯示什麽數據。第壹個方法是“numberOfSectionsInTableView:”,它返回將在表中顯示的組的數量。對於這個應用程序,這壹步很容易,因為我們只需要壹個表段,即具有當前趨勢的表段。

functionnumberOfSectionsInTableView(self,TableView)返回1end

容易嗎?現在,我們必須實現“table view _ numberofroweinsertion”方法,它告訴設備在壹個特定的分組中將有多少行。這對於這個應用程序來說也很容易,因為我們只有壹個表段。還記得我們如何用“init”方法初始化Lua表嗎?只要計算壹下表格中的條目數,就知道表格需要顯示多少行:

function tableView _ numberOfRowsInSection(self,table view,Section)返回#self.trendsend

這使用Lua簡寫來計算表中條目的數量。如果您不熟悉Lua表,以下是壹些要點:

1.在大多數語言中被稱為字典的東西在Lua中被稱為表。

2.在大多數語言中被稱為數組的東西被稱為具有有序數字鍵的表。

3.“Array”使用從1開始的索引,而幾乎所有其他語言都使用從0開始的索引。

接下來是“table view _ titleforheaderinsection”方法。這個方法告訴設備顯示什麽作為壹個組的標題。只要妳返回壹個指定組的字符串,標題就會神奇地出現在表格行的上方:

function tableView _ titleForHeaderInSection(self,table view,section)if section = = 0 then return " CurrentlyTrendingTopics " endreturnnilend

很簡單。現在我們要做的就是用Twitter服務器上的數據填充表單。如果您熟悉Objective-C中的UITableViewControllers,您會知道下面這個方法:

function tableView _ cellforrowatdinexpath(self,table view,index path)local identifier = " TwitterTableViewControllerCell " local cell = table view:dequereusesablecellwithcidentifier(identifier)或uitableviewcell:initwithstyle _ reuse identifier(uitableviewcellstyledefault,identifier)local object = self . trends[index path:row()+1]-必須是+1,因為Lua數組從1開始,cell:text label():settext(object

這個方法稍微復雜壹點。首先,我們定義相同類型的所有表格單元的唯壹標識符,但是可能有不同的內容。在這種情況下,我們稱之為“TwitterTableViewControllerCell”。接下來,我們使用Lua速記方法獲得UITableViewCell的壹個實例。請註意夾在這兩個方法調用之間的“or”。如果第壹次方法調用的結果不是false或nil,則將“cell”設置為第壹次方法調用的值。否則,“cell”將被設置為第二次方法調用的結果。我們這樣做是為了節省內存。這樣,設備壹次只需要為屏幕上大約10個表格單元格分配內存,而不需要為數據源中可能存在的上千個表格單元格分配內存。當然,我們不會有幾千行來表現,但這仍然是壹個需要養成的好習慣。接下來,我們將表格單元格的內容設置為從self.trends“數組”的適當部分獲得的趨勢。我們知道索引永遠不會超出self.trends的範圍,因為我們通過“tableview _ numberofrowinsertion”方法告訴設備數組的大小。最後,我們返回到剛剛創建的表格單元格。如果您現在按“運行”,它應該是這樣的:

#p#副標題#e#

步驟5:從Twitter加載數據

現在我們來談談真正展示Wax魅力的有趣部分:從互聯網或者更準確地說,從Twitter的服務器加載JSON數據。您不妨先創建壹個名為“loadDataFromTwitter”的新方法。這個方法將從Twitter的服務器獲取JSON數據,然後用新數據重新加載這個表。

functionloaddatafromtirter(self)ui application:shared application():setNetworkActivityIndicatorVisible(true)-show spinner wax . http . request {,callback=function(json,response)ui application:shared application():setNetworkActivityIndicatorVisible(false)-hide spinner ifresponse:status code()= = 200 then self . trends = { }-resethelistoftrendswhentsarererefreshed for index,valueinipairs(JSON[" trends "])do-iteovertablewith numericalkeys

是的,就這麽簡單。您定義請求的URL和請求完成後要執行的回調。Wax自動確認服務器運行JSON後會自動將JSON文本轉換成Lua表。這使得顯示網絡活動指示器(設備右上角無線信號指示器附近的圖標)變得極其容易。返回的JSON如下所示。鍵“trends”保存壹組對象,這些對象包含趨勢的名稱和訪問所有提到趨勢的Twitter消息的URL。

趨勢名稱存儲在self.trends變量中後,它被重新加載到tableView中,table view可以再次調用我們之前定義的所有數據方法。這導致趨勢顯示在表中,這與最終產品非常相似。

如果您嘗試立即運行該應用程序,它看起來沒有什麽不同。這是因為從未調用過該方法。如果從“viewDidLoad:”中調用該方法,我們可以確保始終顯示最新的趨勢。將此行添加到“viewDidLoad:”方法的最後壹行之前:

self:loaddatafromtirter()

如果妳點擊“運行”,應用程序看起來有點像這樣(妳要等幾秒鐘才能加載趨勢,請註意那個活動指示器!):

步驟6:添加壹個重新加載按鈕

這個應用挺好的。但是,如果有壹個重新加載按鈕,這樣妳就可以顯示最新的趨勢,那就更好了。幸運的是,這很容易實現。

把重新載入按鈕放在屏幕的右上角。蘋果其實為了方便,提供了壹個上面有刷新圖標的按鈕,就用這個按鈕吧。首先用“viewDidLoad:”方法創建壹個按鈕。在“loadDataFromTwitter”調用之前添加以下行。

local button = UIBarButtonItem:initwithbarbuttonsystem item _ target _ action(uibarbuttonsystem item refresh,self," loadDataFromTwitter ")

這將創建壹個UIBarButtonItem:壹旦按鈕被按下,將在當前對象實例上調用“loadDataFromTwitter”方法。如果妳想嘗試其他風格,妳可以在這裏找到列表。

我們已經創建了按鈕,現在需要將它添加到我們的界面中。使用UITableViewController使這項工作變得容易。我們只需要在導航欄對象實例上調用“setRightBarButtonItem:”方法,就像這樣(這壹行在上面給出的那壹行後面):

self:navigation item():setRightBarButtonItem(button)

如果您做了所有的事情,完成的應用程序應該如下所示:

步驟7:額外福利

這個項目的壹個有趣的擴展是制作更顯眼的裝載指示器。這可能需要將UIActivityIndicatorView放在其中壹個按鈕位置。

結論

希望妳覺得這個教程簡單的介紹了蠟。如果妳想看更多關於某個主題的蠟教程,請給我留言。

#p#副標題#e#