本文是在xocde6 beta1版本下写得,到xcode6正式版本后会有些小错误,请参看我的另一篇博客swift第一个ios项目,纯代码编程(续)http://blog.csdn.net/lh_work/article/details/40787265
是在本文基础上修改和添加了一些东西
最近看了看网上关于swift的一些基础介绍,大部分都采用了storyboard的方式来设计界面。但是本人还是比较喜欢以纯代码的方式来写代码的,呵呵,和本人的习惯有关。所以在这里介绍一下怎么样基于swift语言用纯代码的方式来写一个小应用吧。
当前AppStore中还没有推出Xcode6的正式版本,只能去官网用开发者账号下载beta版本,同时Xcode6要求OS X版本在10.9.3以上版本,所以发现无法使用Xcode6的朋友先升级下系统吧。
现在开始打开Xcode6来创建一个新项目吧
选择Empty Application后点击next后再选择存储位置,这里就不赘述了,直接开始写代码吧
进入项目的时候只有一个AppDelegate.swift代码文件,和以前的ios项目中.h和.m文件实现一个类不同,swift语言将.h和.m中合并成了一个.swift来实现
那么我们现在先来创建一个试图控制器ViewController,为方便下一步给UIWindow设置根试图控制器
选择Cocoa Touch Class点击Next 继续
照着图选择继承的类和swift语言点击Next
此时将多出了一个ViewController.swift代码文件,进入这个代码文件将其init方法删除,记得必须删除,因为我们下面是用纯代码创建对象的,如果不删除这个nib初始化方法,下面在AppDelegate中创建的时候将会出错。
将
init(nibName nibNameOrNil:String?, bundle nibBundleOrNil:NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
// Custom initialization
}
删除。
回到AppDelegate中开始写代码
func application(application:UIApplication, didFinishLaunchingWithOptions launchOptions:NSDictionary?) -> Bool {
//创建试图控制器
var vc =ViewController()
//创建导航控制器,并设置其根试图控制器为vc
var nav =UINavigationController(rootViewController:vc);
self.window =UIWindow(frame:UIScreen.mainScreen().bounds)
// Override point for customization after application launch.
self.window!.backgroundColor =UIColor.whiteColor()
//设置UIWindow的根试图控制器
self.window!.rootViewController = nav;
self.window!.makeKeyAndVisible()
returntrue
}
这样就实现了纯代码的方式在swift基础上实现程序试图控制器的跳转了,接下来我们在试图控制器中添加并实现一个简单的tableview的使用
进入ViewController中
//创建tableview
var tableView :UITableView?
overridefunc viewDidLoad() {
super.viewDidLoad()
self.title ="MySwift"
setupViews()
// Do any additional setup after loading the view.
}
func setupViews()
{
//初始化tableview并设置frame
self.tableView =UITableView(frame:self.view!.frame)
//设置tableview的代理对象
self.tableView!.delegate =self
self.tableView!.dataSource =self
self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier:"cell")
//将tableview添加到view试图上
self.view?.addSubview(self.tableView)
}
class ViewController:UIViewController ,UITableViewDelegate ,UITableViewDataSource{
大家继续写的时候发现
self.tableView!.dataSource = self
这里仍然报错,原因是UITableViewDataSource有两个必须实现的方法,只要把这两个方法粘贴到代码中就不会了,后面的报错就不一一赘述原因了,这里的报错很多就是方法没有返回值或者没有实现代理引起的警告。
好,我们下面实现两个代理方法
func tableView(tableView:UITableView!, numberOfRowsInSection section:Int) -> Int
{
return20;
}
// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)
func tableView(tableView:UITableView!, cellForRowAtIndexPath indexPath:NSIndexPath!) -> UITableViewCell!
{
let cell = tableView .dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)as UITableViewCell
cell.textLabel.text =String(format:"%i", indexPath.row+1)
return cell
}