swift入门之TableView

IOS8更新了,oc还将继续但新增了swift语言,能够代替oc编写ios应用,本文将使用swift作为编写语言,为大家提供step by step的教程。

工具

ios每次更新都须要更新xcode,这次也不例外,但使用xcode6,须要先升级到OS X 到Yosemite。具体的升级过程这里就不说了。

须要网盘下载的同学能够查看一下链接

http://bbs.pcbeta.com/viewthread-1516116-1-1.html

建立project

xocde开启后选择File->New->Project 建立新的project

新手教程自然选择Single View Application

Language 自然选择 Swift

建立好的project例如以下图所看到的:

Work With StoryBoard

StoryBoard是IOS5和xcode 4.2開始的新特性,使用storyboard会节省手机app设计的时间,将视图设计最大化,当然对于屌丝程序猿来说,什么board都无所谓。

箭头表示初始view。右下角的object library还是我们最熟悉的拖拽操作。

添加一个TableView到当前的ViewController。当然你也能够直接使用TableViewController。ViewController基本上与Android的Activity相似,都是View的控制器,用来编写View的逻辑。

好了,能够Run一下看看效果。

Hello world swift

最终能够開始swift之旅了,我们来看一下AppDelegate.swift文件。

//
//  AppDelegate.swift
//  swiftTableView
//
//  Created by Chi Zhang on 14/6/4.
//  Copyright (c) 2014年 Chi. All rights reserved.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    func applicationWillResignActive(application: UIApplication) {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
    }

    func applicationDidEnterBackground(application: UIApplication) {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }

    func applicationWillEnterForeground(application: UIApplication) {
        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    }

    func applicationDidBecomeActive(application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }

    func applicationWillTerminate(application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }

}

是不是似曾相识,但组织上更像java和c#的逻辑,但别忘记骨子里还是object c。

打上一句hello world在application方法中。

println("helloworld")

能够Run一下看看效果,Application方法基本上与Android中的Application类似,都是App在開始载入时最先被运行的。

Swift的语法相对object c更加简洁,声明函数使用func开头,变量var开头,常量let开头,感觉上与javascript更加相似。

ViewController绑定TableView

最终到了本章最核心的内容了,怎样绑定数据到TableView。

首先我们看ViewController的代码:

//
//  ViewController.swift
//  swiftTableView
//
//  Created by Chi Zhang on 14/6/4.
//  Copyright (c) 2014年 Chi. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

默认的ViewController仅仅提供了两个override的方法viewDidLoad和didReceiveMemoryWarning

我们须要让ViewController继承 UIViewController UITableViewDelegate UITableViewDataSource 三个类

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { ... }

添加完后,xcode会提示错误,当然不会像eclipse一样自己主动帮你加入必须的方法和构造函数,须要自行加入。

    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
       ...
    }
    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {...}

在ViewController中声明变量tableView用来管理我们之前在Storyboard中加入的tableView。

@IBOutlet
var tableView: UITableView

@IBOutlet 声明改变量暴露在Interface binder中。

在viewDidLoad时,在tableView变量中添加tableViewCell

self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

声明一个String数组作为我们要绑定的数据

    var items: String[] = ["China", "USA", "Russia"]

在刚才声明的两个构造函数中填充逻辑。

    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
        return self.items.count;
    }

    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
        var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell

        cell.textLabel.text = self.items[indexPath.row]

        return cell
    }

好了,ViewController的部分基本上就写完了。然后我们切换回StoryBoard,将Referencing Outlet与ViewController进行连接,选择我们声明的变量tableView。

同一时候连接Outlets中的datasource和deletegate到ViewController。

以下是完整的ViewController代码:

//
//  ViewController.swift
//  swiftTableView
//
//  Created by Chi Zhang on 14/6/4.
//  Copyright (c) 2014年 Chi. All rights reserved.
//

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource  {

    @IBOutlet
    var tableView: UITableView
    var items: String[] = ["China", "USA", "Russia"]

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
        return self.items.count;
    }

    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
        var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell

        cell.textLabel.text = self.items[indexPath.row]

        return cell
    }
}

好了,执行一下看看结果:

大功告成。当然我们还能够在ViewController中添加onCellClick的方法:

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
        println("You selected cell #\(indexPath.row)!")
    }

完整代码

时间: 2024-10-19 21:50:36

swift入门之TableView的相关文章

Swift入门(五)——数组(Array)

集合 集合的定义 Swift中提供了两种数据结构用于存放数据的集合,分别是数组(Array)和字典(Dictionary).他们的主要区别在于数组中的元素由下标确定,而字典中的数据的值由数据的键(Key)决定.以下我们认为集合就是数组或字典. 集合的可变性 我们可以定义一个集合常量或者集合变量.一旦定义为常量,就意味着集合的长度.内容和顺序都不能再修改了.比如,定义为常量的数组,不能再向其中添加新的元素. 数组的创建 由于swift中变量的创建遵循" var 变量名:变量类型 "的语法

Swift入门(九)——String与Int、Double、Float等数字相互转换

三种转换模式 任何语言里面,Int.float.double等数字类型自成一派,但它们和String类型之间的转换总是不太方便,这里总结一下它们相互转换的方法.总结下来一共有三种转换模式,分别举例说明. 一.String转数字 这里以String类型转Int类型为例.String转其他的数字类型(Float.Double等)大同小异.主要用到的方法是String类型的toInt方法.注意这个方法返回的是Int?,即一个整数可选类型.所以需要解封. var string = "1234"

Swift入门(三)——元组(Tuple)

定义 元组是一个包含了若干个相关联变量的对象. 元组的创建 var newTuple = ("kt",20) //由于Swift的类型推导,newTuple被推导为(String,Int)类型的变量 元组的解绑 几个变量一旦联合在一起,组成了一个元组,他们就被"绑定"了,要想从一个元组中单独取出某一个数据时,需要解绑元组. 直接解绑 直接解绑是最简单的一种解绑方式,只要定义若干个变量与元组中的变量一一对应即可. var newTuple = ("kt&qu

Swift入门篇-结构体

前面主要是介绍swift语言中基本类型的用法,今天给大家介绍的是swift的结构体的用法,swift中结构体的用法和其他语言的用法,还有不太一样,不过您多敲几遍,就可以理解结构体,结构体在ios开发中是灰常重要的一部分,如果您很好的掌握结构体,在后面ios开发中,会理解的更加清楚. 一:结构体声明 格式: struct 结构体名 { } 说明: 1: struct 是定义结构体的关键字 例子 /* 1:struct 是结构体的关键字 2:student 结构体名称 3:student() 创建一

swift入门篇-函数

今天给大家介绍 swift函数,swift函数和c#,js的写法大致一直,但是与object-c写法有很大不同点.废话不多说,直接开始了. 1:函数  --常量参数 func 函数名( 参数变量:类型 ,参数变量:类型...){} 说明: 1: func 是函数关键字 2:{} 函数体 3: 参数变量是默认常量类型,不能在函数函数体里面直接修改 即 func A (value:String)  与 func A (let value:String)写法是相同的,即value 是常量. 例子 /*

Swift入门篇-集合

一:数组 一:可变数组 定义:数组使用有序列表存储相同类型的多重数据. 格式: 第一种格式 var 变量: 类型[] = [变量值,变量值,...] 第二种格式 var 变量 =[变量值,变量值,...] 说明: 1:[变量值,变量值...] 这样表示数组 ,前提是 变量值的类型必须一值.(和其他语言有所不同) 2:上面两种格式都是定义一个数组,数组中的变量值的类型必须一致 3:第一种格式定义的数组,是直接定义数组,第二种格式定义的数组 是编译器通过类型值推导出是数组格式 注意点 1:常量关键字

iOS开发——UI高级Swift篇&swift简单总结tableView

swift简单总结tableView 今天来总结一个很简单的问题,真心说出来丢脸,但是由于本人在写swift项目的时候总是发现Xib不能加载,而且不止一次,所以就简单的总结一下! 一:简单的使用缓存池 1.设置StoryBoard中cell的ID 2.在控制器的Cell中就可以直接使用ID创建了 1 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UI

Swift入门(十二)——利用Extension添加逆序输出字符串方法

Swift好像没有自带逆序输出字符串的方法,于是决定通过拓展(Extension)给String类添加一个逆序输出字符串的reverse方法. 首先新建一个Swift文件,命名规则不太清楚,于是暂且模仿OC叫做String+Operation吧,然后实现我们需要拓展的方法.下面先贴上代码,然后解释一下这段代码. //String+Operation.swifft import Foundation //逆序输出swift中的字符串 extension String{ func Reverse()

Swift入门(四)——可选类型(Optionals)与断言(Assert)

可选类型是什么? 首先看一个问题,Swift中String类型的变量有一个叫做toInt的方法,可以把String类型变量转换为Int类型变量. var stringValue = "5" var intValue = stringValue.toInt(); println("intvalue = \(intValue)") 执行以上方法后得到了奇怪的结果: intvalue = Optional(5) 其实,可以发现,toInt方法的返回值并不是Int,而是In