APPLE WATCH 中文手册:APPLE WatchKit Apps--表格

1418720197791879

本文翻译自Apple Watch Programming Guide:WatchKit Apps--Tables,敬请勘误。

使用table展示内容可动态更改的列表数据。WatchKit 仅支持使用WKInterfaceTable类的单列表格。想要在table中展示数据,需要先为数据定义布局,并在运行时通过编码填写表数据。您需要在Xcode工程中做以下事情:

在storyboard文件中:

  • 给界面控制器场景添加table对象,并在界面控制器中为table创建一个outlet。
  • 像Configuring Row Types描述的那样为table配置一个或多个row types。

在代码中:

您可以为每个table定义多个行类型,每种类型都有不同的外观。在运行时,您可以指定所需行类型以及它们在table中的排列顺序。对于如何配置table的详细信息,请参看WKInterfaceTable Class Reference.

配置Row Types

Row Type是一个在table中以单行形式展示数据的模板。每个table必须至少有一个row type,您可以根据需求定义额外的row type。您可以用row type区分table中的不同内容。比如您可能在内容行上、标题和注脚上使用不同的类型。当您为界面控制器场景添加table时,Xcode会自动创建初始的row types供您配置。

为table添加row  types:

  • 在storyboard文件中选中table对象
  • 打开Attributes inspector.
  • 使用Rows属性更改可用row type数量。

每个row type最初都包含一个单个组元素。您可以为该组元素添加标签、图片以及其他所需对象。标签和图片的真实内容通常是无关紧要的。在运行时,作为配置工作的一部分,您可以替换界面对象的内容。

想要在运行时管理表格行的内容,您需要提供一个自定义的row controller 类。大部分row controller类包含少量代码,或者根本就不包含代码,它们主要用来访问那些包含界面对象的outlets。不过,如果您在表格行中添加了按钮或者其他控件,那么其类也会包含一些动作方法,以响应用户与控件的交互。

为row type定义一个row controller类:

  • 为WatchKit扩展添加一个新的Cocoa Touch类
  • 让新类继承NSObject
  • 为每个计划在运行时访问的标签、图片或者控件添加声明的属性。声明属性可使用以下格式,请更改类以匹配相应的界面对象:
@property (weak, nonatomic) IBOutlet WKInterfaceLabel* label;

Listing 10-1 展示了一个用于管理row type的示例类

@interface MainRowType : NSObject
@property (weak, nonatomic) IBOutlet WKInterfaceLabel* rowDescription;
@property (weak, nonatomic) IBOutlet WKInterfaceImage* rowIcon;
@end

您可以在storyboard文件中完成row type配置。配置表格行要求设置其类,并将任何outlets连接到对应的界面对象上。您还必须提供一个方法,以便通过命名row type在运行时辨别表格行。

在storyboard中配置row type:

  • 在storyboard文件中选中row controller对象。
  • 将row controller的Identifier属性设置为唯一值,随后您会在创建表格行时使用该标识符。

在行类型中该值必须是唯一的,但是实际值还是由您来定夺。在Attributes inspector中设置该值。

  • 将row type的类设置为您的自定义类。您需要在Identity inspector中设置类信息。

将row type元素和类中对应的outlets连接起来。

  • 将storyboard文件中的项目和outlets连接并绑定。当您在代码中配置table时,WatchKit会在运行时使用该信息实例化对应的类。

Figure 10-1 在Xcode中配置一个命名为"Main Row Type"的row type,并设置为使用Listing 10-1中定义的MainRowType类。该类中的rowDescription 和rowIcon outlets被连接到行中的图片和标签。

1418720785829419

运行时配置table内容

在运行时,您可以为table添加表格行并以编程形式配置其内容。通常,添加并配置表格行是初始化界面控制器过程中的一部分。

创建并配置列表行

  • 先决定你需要创建的行的数目和类型,这取决于你想要展示的数据类型。
  • 使用setRowTypes:或者setNumberOfRaws:withRowType:方法来创建。这两个方法都会在界面上创建新的列表行,并且会在WatchKit扩展中实例化对应的类。这些实例被保存在table中,且可通过rowControllerAtIndex:方法访问。
  • 使用rowControllerAtIndex:方法遍历表格中的每一行。
  • 使用row controller对象来配置每一行中的内容。

setRowType:和setNumberOfRaws:withRowType:方法实例化与storyboard文件中对应的行类型相关的类。在调用这些方法之后,紧接着就可以直接获取最新创建的row controller对象了,当然还可以通过这些对象来设置内容。下面的Listing 10-2这段代码则是一个能创建新行并对其进行配置的简单示例。在这个例子里,使用的是在代码Listing 10-1中定义的MainRowType类,以及自定义的MyDataObject类,MyDataObject类用于提供table中用于行内容的数据。在setNumberOfRaws:withRowType:方法中设置好数据对象之后,代码会遍历该对象,并使用它们配置表格中每一行的内容。

Listing 10-2 创建并配置table中的行

- (void)configureTableWithData:(NSArray*)dataObjects {
    [self.table setNumberOfRows:[dataObjects count] withRowType:@"mainRowType"];
    for (NSInteger i = 0; i < self.table.numberOfRows; i++) {
        MainRowType* theRow = [self.table rowControllerAtIndex:i];
        MyDataObject* dataObj = [dataObjects objectAtIndex:i];
 
        [theRow.rowDescription setText:dataObj.text];
        [theRow.rowIcon setImage:dataObj.image];
    }
}

表格行的选中处理

界面控制器负责处理table中的行选中操作。当用户点击table中的某一行,WatchKit会选中该行并调用WatchKit扩展中正确的方法。您可以在以下地方处理表格行的选中操作:

您可以使用以上两者之一来处理行选中事件。如果您的界面控制器有多个table,那推荐使用一个动作方法,因为您无需判定操作跟哪个table有关。如果您使用了一个动作方法,那需要遵循下面的语法:

- (IBAction)myTableAction:(NSInteger)rowIndex

通过选中表格行来执行app相关的任何操作,比如跳转新界面,或者更新行中显示的内容。如果您不希望用户选中表格行,可以在Storyboard中禁用相应的row controller的Selectable选项。

原创文章,作者:ioued,如若转载,请注明出处:https://www.iamue.com/6258/

(0)
iouedioued
上一篇 2015-06-15 10:08
下一篇 2015-06-15 11:12

相关推荐

  • 邀你参与丨2018中国用户体验行业调研

    什么是用户体验设计?往小了说,它包括视觉设计、交互设计、用户研究等,宽泛一点讲,产品、文案、服务流程的设计也是用户体验的一部分。用户体验不是一个独立的岗位,它应该是整个团队的一种思考维度。而在其中,你又扮演着什么样的角色呢?在行业中你的专业能力和知识储备在什么层次?用户体验行业的未来,将会往何处发展?自2013年以来,IXDC已连续开展了5次用户体验行业调研,回收了上万份从业人员的反馈,并总结出调研报告,以全局角度俯瞰,了解行业现状与存...

    2018-04-19
  • 用户体验设计 - 快问快答

    首先感谢大家关注我。上篇文章收到了很多小伙伴的反馈,很多人说想多看我更新与用户体验有关的文章,也有反应说有文章长度过长。所以这篇文章我用了快问快答的形式,回答了几个新手用户体验设计师比较关心的问题。因为我自己也是转行做UX,所以希望我走过的弯路大家可以绕过去一些。欢迎大家把我的文章发给其他小伙伴,一起共同进步。也欢迎大家给我意见与建议,你们的观点对我真的很重要!(这次文末有彩蛋)1.什么是用户体验(UX)?这是一个很大的问题,就像你问我...

    微信热点 2018-02-02
  • 浅聊四个主流的页面间跳转动效

    最近一直在做交互规范总结的工作,在不断梳理页面间跳转逻辑的同时,发现页面间的逻辑关系并不能和页面间跳转的动效很好的结合上。虽然只是零点几秒 的切换动效,却能在一定程度上影响用户对于页面间逻辑的认知。为了输出详细的规范,花了大量时间把玩现在公司线上的产品以及国内外优秀的APP,尤其是苹 果、谷歌自己开发的APP。(如果某些方面在设计规范中并没有给出答案,就在原生APP中找答案吧!)

    2017-05-29
  • 移动端搜索功能研究

    搜索功能无论在web端还是移动端,都是产品中十分重要的功能。文章主要从用户体验和产品功能、策略角度来分析,提出一些对应的设计方法。 搜索能够帮助用户快速精确找到想要的结果,其中两个重要目标是提高搜索结果…

    2016-10-28
  • App加载动画知识体系:交互、视觉都需要掌握!

    我大胆预测了一下,以后App的加载动画都应该遵循越来越简洁的设计原则,突出内容,去掉无用的、过渡的形式设计。也许无文字提示的加载动画确实是一个流行趋势!

    2017-05-12
  • 线上广告更加吸引人的5个思路

    今天说讲述的5个思路是不同的,内容决定设计,留白,故事都和这种填鸭式的广告不是一个路子。而线上广告和传统广告最大的不同在于,它可以创造体验。

    2017-05-04
  • 做完了产品分析和运营分析,如何做一份视觉竞品分析?

    做好一份竞品分析、输出优秀的设计观点,可能是衡量一个团队专业与否的第一步。

    2017-05-18
  • 交互设计七大定律之Tesler's Law 泰思勒定律(复杂性守恒定律)

      最近在整理交互设计七大定律,发现了这篇老文,内容很精彩,翻译下与大家分享。 最近在整理交互设计七大定律,文章要系统的看。 目录:【交互设计七大定律】关于交互设计法则“除非有更好的选择,否则就遵从…

    交互设计 2015-08-27
  • Axure基础

    目录(使用微信自带页面搜索功能)第一章 使用元件基础1. 添加元件到画布基础2. 添加元件名称基础3. 设置元件位置/尺寸基础4. 设置元件默认角度基础5. 设置元件颜色与透明基础6. 设置形状或图片圆角基础7. 设置矩形仅显示部分边框基础8. 设置线段/箭头/边框样式基础9. 设置元件文字边距/行距基础10. 设置元件默认隐藏基础11. 设置文本框输入为密码基础12. 设置打开选择文件窗口基础13. 限制文本框输入字符位数基础14. ...

    2018-03-15
  • 2017赶集招聘节项目总结:建一座招聘之城

    为了在“金三银四”抢占先机,向本站导流,最重要的,是为了向广大蓝领招聘群体营造有趣、可信的平台,输出赶集优秀的设计价值和体验,我们3个设计师进行了各个维度的配合。注:视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的有景深的视觉体验。作为近年网页设计的热点趋势,越来越多的网站应用了这项技术。

    2017-04-30