AppleWatch开发入门四——Table视图的应用

AppleWatch开发入门四——Table视图的应用

一、Watch上的Table

        WatchOS中的TableView和iOS中的TableView还是有很大的区别,在开发之前,首先我们应该明白WatchOS中的Table有哪些局限性和特点。下面几点是我总结WatchOS中Table的特殊之处:

1、Table只有行的概念,没有分区的概念,没有头尾视图的概念。

2、可以通过创建多个Table,来实现分区的效果。

3、因为Watch上是通过Gruop进行布局适应的,所以没有行高等设置。

4、Table没有代理,所有行的数据都是采用静态配置的方式,后面会介绍。

5、点击Table中的行触发的方法,是通过重写Interface中的方法来实现的。

二、创建一个Table

        在storyBoard中拖入你的Table,如下:

在Table上拉两个label:

每一个Table中包含一个TableRowController,实际上我们Table上的控件都是通过这个TableRowController进行管理的,因此如果我们需要在代码中控制TableRow上的内容,我们需要创建一个文件作为Table的TableRowController:

将storyBoard中TableRowController的类修改为我们创建的类并指定一个identifier:

然后,我们将两个label关联到TableRowController中:

import WatchKit
class TableRowController: NSObject {

    @IBOutlet var numberLabel: WKInterfaceLabel!
    @IBOutlet var titleLabel: WKInterfaceLabel!
}

将Table关联到interfaceController中:

class InterfaceControllerMain: WKInterfaceController {
    
    @IBOutlet var Table: WKInterfaceTable!

}

下面,我们开始在interface中对Table做相关配置,首先我们可以先观察一下WKInterfaceTable中有哪些方法和属性:

public class WKInterfaceTable : WKInterfaceObject {
    //设置行的类型,数组中对应存放行的类型,数组元素的个数,就是行数
    /*
    通过这个方法,我们可以创建每一行样式都不同的table,行的类型
    实际上就是我们刚才用到的TableRowController,我们可以进行自定义
    */
    public func setRowTypes(rowTypes: [String]) 
    //设置行数和类型 用于创建单一行类型的table
    public func setNumberOfRows(numberOfRows: Int, withRowType rowType: String) // repeating row name
    //这个get方法获取行数,用于我们遍历table中的行,进行内容设置
    public var numberOfRows: Int { get }
    //这个方法会返回某一行,我们可以获取到后进行内容设置
    public func rowControllerAtIndex(index: Int) -> AnyObject?
    //插入一行
    public func insertRowsAtIndexes(rows: NSIndexSet, withRowType rowType: String)
    //删除一行
    public func removeRowsAtIndexes(rows: NSIndexSet)
    //滑动到某一行
    public func scrollToRowAtIndex(index: Int)
}

了解了上面的方法,可以看出,WatchOS的Table配置非常简单易用,例如我们如下配置:

@IBOutlet var Table: WKInterfaceTable!

    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)
        let dic:Dictionary<String,String> = ["中国建设银行":"¥1000","中国农业银行":"¥5000","中国银行":"20000","招商银行":"¥401","中国邮政储蓄":"1100"]
        //设置行数与类型
        Table.setNumberOfRows(dic.count, withRowType: "TableRowController")
        //遍历进行设置
        let titleArray:Array<String> = Array(dic.keys)
        for var i=0 ; i < dic.count ; i++ {
            let row:TableRowController = Table.rowControllerAtIndex(i) as! TableRowController
            row.titleLabel.setText(titleArray[i])
            row.numberLabel.setText(dic[titleArray[i]])
            row.numberLabel.setTextColor(UIColor.grayColor())
        }
        // Configure interface objects here.
    }

这样一个展示银行卡余额的界面我们就创建完成了,效果如下:

三、关于Table的点击事件

        上面我们提到,Table没有所谓代理方法,点击row的时候,我们也是通过两种方式进行逻辑跳转的,一种是在storyBoard中,我们通过拉线跳转,这时如需传值,我们需在interface中实现如下方法:

 public func contextForSegueWithIdentifier(segueIdentifier: String, inTable table: WKInterfaceTable, rowIndex: Int) -> AnyObject?

        另一种方式,我们可以重写实现InterfaceController中的如下方法,来处理Table的点击事件:

public func table(table: WKInterfaceTable, didSelectRowAtIndex rowIndex: Int)

        无论哪种方式,我们都可以通过参数table和rowIndex来确认点击的具体是那个table和哪一行,进行传值和处理我们的逻辑。             

专注技术,热爱生活,交流技术,也做朋友。 ——珲少 QQ群:203317592

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

第二十九天-加强1-Junit&类加载&反射&Properties&BeanUtils&xml&动态代理&数据库【悟空教程】

第二十九天-加强1-Junit&类加载&反射&Properties&BeanUtils&xml&动态代理&数据库【悟空教程】

23170
来自专栏*坤的Blog

自写文件小工具类

18730
来自专栏Golang语言社区

go语言的sql包原理与用法分析

本文实例讲述了go语言的sql包原理与用法。分享给大家供大家参考,具体如下: go的sql包是在pkg/database中,里面的两个包sql和sql/driv...

46160
来自专栏xiaoheike

Hibernate save, saveOrUpdate, persist, merge, update 区别

hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思。我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保...

16530
来自专栏Jerry的SAP技术分享

ABAP和Java单例模式的攻防

然而我只需要将这个单例类JerrySingleton的构造函数通过反射设置成可以访问Accessible,然后就能通过反射调用该构造函数,进而生成新的对象实例。...

18140
来自专栏岑玉海

hbase源码系列(九)StoreFile存储格式

从这一章开始要讲Region Server这块的了,但是在讲Region Server这块之前得讲一下StoreFile,否则后面的不好讲下去,这块是基础,Re...

41050
来自专栏IMWeb前端团队

bash 的条件和循环

本文作者:IMWeb 江源 原文出处:IMWeb社区 未经同意,禁止转载 原文 条件语句和循环可以统称为流程控制,是一门语言最基础的部分。 bash ...

19260
来自专栏农夫安全

注入学习之sqli-labs-5(第四次)

前言 第七关先跳过,先把get注入系列讲完再来讲 不知道大家有没有玩过一个猜数字的游戏 我给出一个数的范围,比如1-100,然后你去猜,我只会回答你对或者错。 ...

393100
来自专栏程序员叨叨叨

【PHP】Propel的使用,看这一篇就够了

本文为学习Propel框架使用的笔记,默认已经安装好Propel环境,若有读者不知如何安装Propel,可参考《听说你PHP配置Composer遇到了一些困境》...

47450
来自专栏程序员的SOD蜜

调用PostgreSQL存储过程,找不到函数名的问题

PostgreSQL的表,函数名称都是严格区分大小写的,所以在使用的时候没有注意大小写问题容易导致找不到函数名的错误,但最近两天我们发现,如果函数参数使用了自定...

29150

扫码关注云+社区

领取腾讯云代金券