ios开发愤怒的小鸟的Lua语言:Wax框架详解(二)


  在《开发奋怒的小鸟的Lua语言:Wax框架详解》中介绍了Wax及其 长处 。在本文中我们首先为大家 预备了Wax框架的下载包,您 可以把Wax下载下来,与我们一同 实现用Wax构建一个 方便的 利用程序的过程 。

Wax下载

  这个 利用程序显示Twitter上的目前趋向话题列表, 可以用按钮来更新内容 。当 实现整个过程之后没准一个创意就能让你开发出自己的《愤慨的小鸟》 。最终的 后果:

最终的

  第一步: 综合AppDelegate.lua

  假如你看一下目前的AppDelegate.lua,会 留神到几个方面 。首先,你会 留神到这个Lua文件的第一行 。这一行是Objective-C类申明 。我们 缔造了一个名为“AppDelegate”的类,它 相符“UIApplocationDelegate” 协定 。接下来,你会看到文件中唯一的一个 步骤:“applicationDidFinishLaunching” 。每当 利用程序启动,就调用这个有名的 步骤 。 利用程序现在 可以在屏幕上显示内容 。“applicationDidFinishLaunching”里面的代码 根本上不需求加以 注明 。它 构建了一个蓝色背景的新窗口, 而后将一些白色文本放在上面 。不过,我们需求的是一个Twitter客户程序,而不是“Hello Lua!”屏幕 。 不妨先从 缔造UITableViewController 动手 。

  第二步: 相熟的UITableViewController

  在名为“TwitterViewController.lua”的脚本目录中 缔造一个新文件 。假如你记性很好,会记得为了申明新的Objective-C类,我们需求 使用waxClass函数 。假如你记性超好,会记得waxClass工作起来像这样:

  1. waxClass{"CLASS NAME""PARENT_CLASS"}  

  我们需求 扩大UITableViewController的一个类,所以它看起来像这样:

  1. waxClass{"TwitterViewController", UITableViewController}  

  我们已定义了类,现在 解决初始化 。在我们的“init” 步骤中,我们把表设成“grouped”,而不是默许状况下的“plain” 。由于我们还要显示趋向表,所以也有必要对 包容全部趋向的Lua表进行初始化:

  1. function init(self)  
  2.     self.super:initWithStyle(UITableViewStyleGrouped)  
  3.     self.trends = {}  
  4.    
  5.     return self  
  6. end 

   根本上不需求加以 注明 。

  第三步: 预备表

  我们已有了一张分组表,就需求一个 题目 。我们用“viewDidLoad:” 步骤来实现这一步 。

  1. function viewDidLoad(self)    
  2.         self:setTitle("My First Wax Application")    
  3.         self:tableView():setAllowsSelection(false)    
  4. end  

  

   彻底不需求加以 注明 。我们 惟独把 题目放到屏幕顶部的那个条上, 而后 预防消费者 取舍表里面的任何行 。我们不想消费者 取舍任何行,是由于我们不想 解决这个操作 。 可以在苹果的UITableViewController 注明文档页面上看到,你能调用哪些 其余 步骤 。 惟独记住:你得 使用“:property()”和“:setProperty(value)” 步骤,而不是 使用属性 。按Xcode左上角的“Run”, 利用程序看起来应该像这样:

预备表

  第四步:UITableViewController数据 步骤

  我们的 利用程序 可以启动,这很好,但我们想要显示一些数据 。为了显示这些数据,全部UITableViewController必须 施行几个 步骤,告诉 设施显示什么数据 。其中第一个 步骤是“numberOfSectionsInTableView:”,它会返回将在表中显示的群组数量 。对该 利用程序来说,这一步很方便,由于我们 惟独求一个表段,即 占有目前趋向的那个表段 。

  1. function numberOfSectionsInTableView(self, tableView)  
  2.         return 1  
  3. end  

  是否很方便?现在我们得 施行“tableView_numberOfRowsInSection” 步骤,它告诉 设施某个特定的分组会有多少行 。对该 利用程序来说,这同样很方便,由于我们惟独一个表段 。记得我们如何用“init” 步骤对Lua表进行初始化吗? 惟独计数该表中的表项数量,就晓得该表需求显示多少行:

  1. function tableView_numberOfRowsInSection(self, tableView, section)  
  2.         return #self.trends  
  3. end  

  这 使用Lua简写 步骤来计数表中的表项数量 。假如你不 相熟Lua表,下面有几个要点:

  1. 大多数语言中被称为词典的东西在Lua中被称为表 。

  2. 大多数语言中被称为数组的东西被称为带有序数字键的表 。

  3. “数组” 使用从1开始的索引,而 几乎 其余每种语言 使用从0开始的索引 。

  接下来是“tableView_titleForHeaderInSection” 步骤 。该 步骤告诉 设施显示什么作为某群组的 题目 。你 惟独返回某个指定群组的字符串, 题目之后会神秘地浮现在表行上方:

  1. function tableView_titleForHeaderInSection(self, tableView, section)   
  2.             if section == 0 then   
  3.                 return "Currently Trending Topics"   
  4. end        
  5.             return nil   
  6. end   

  相当 方便 。现在我们 惟独往表格填充从Twitter的服务器取来的数据 。假如你 相熟Objective-C中的UITableViewControllers,就会 意识这下一个 步骤:

  1. function tableView_cellForRowAtIndexPath(self, tableView, indexPath)  
  2. local identifier = "TwitterTableViewControllerCell"  
  3. local cell = tableView:dequeueReusableCellWithIdentifier(identifier) or  
  4.       UITableViewCell:initWithStyle_reuseIdentifier(UITableViewCellStyleDefault, identifier)  
  5. local object = self.trends[indexPath:row() + 1] -- 必须是+1,由于Lua数组从1开始  
  6. cell:textLabel():setText(object)  
  7.         return cell  
  8. end  

  这个 步骤要复杂丝毫 。首先,我们定义了对同一 品种型,但可能有不同内容的全部表格单元(cell)来说很独特的标识符 。这种状况下,我们称之为“TwitterTableViewControllerCell” 。接下来,我们 使用Lua简写 步骤, 获得UITableViewCell的实例 。 留神夹在这两个 步骤调用中间的“or” 。假如第一个 步骤调用的 后果不是false或nil, “cell”就被设成第一个 步骤调用的值 。不然,“cell”会被设成是第二个 步骤调用的 后果 。我们这么做是为了 节俭内存 。这样一来, 设施每次 惟独为屏幕上10个左右的表格单元 调配内存,而不是为数据源里面可能 占有的数千个表格单元 调配内存 。固然,我们不会有数千行要显示,但这仍是个有必要养成的好习惯 。接下来,我们把表格单元的内容设成从self.trends“数组”的 合适 部分猎取的趋向 。我们晓得,该索引 向来不会超出self.trends的 规模,由于我们通过 步骤“tableView_numberOfRowsInSection”,将数组大小告诉给了 设施 。最终,我们返回刚 缔造的表格单元 。假如你现在按“Run”,它应该看起来像这样:

返回刚