[爱上Swift]第三弹:使用Swift建立App基本基石

时间:2014-07-24 05:05:08   收藏:0   阅读:10029
bubuko.com,布布扣

搭架子

首先这次我们会主要使用IOS自带的导航Controller为一个APP建立一个简单的基石,

新建一个空的Application并创建3个swift文件,分别命名为:FirstViewController,SecondViewController,ThirdViewController;

bubuko.com,布布扣

同时在三个Swift的Controller中重写继承类的viewDidLoad()方法:

 override func viewDidLoad(){
        super.viewDidLoad();
}

在整个程序中的AppDelegate.swift文件,是整个APP的事件代理类,这里可以展现整个APP的生命特征,同时有.net程序中Globle文件的作用,可以作为主程序声明用。

在此文件中我们加入如下代码,将创建的3个Controller注册到Application中:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        // Override point for customization after application launch.
        self.window!.backgroundColor = UIColor.whiteColor()
        
        let firstVC=FirstController();
        let nav1=UINavigationController(rootViewController:firstVC);
        let image1=UIImage(named:"h.png");
        nav1.tabBarItem=UITabBarItem(title:"完美食材",image:image1,tag:1);
        
        let secondVC=SecondConreoller();
        let nav2=UINavigationController(rootViewController:secondVC);
        let image2=UIImage(named:"o.png");
        nav2.tabBarItem=UITabBarItem(title:"国色天香",image:image2,tag:2);
        
        let thirdVC=ThirdController();
        let nav3=UINavigationController(rootViewController:thirdVC);
        let image3=UIImage(named:"s.png");
        nav3.tabBarItem=UITabBarItem(title:"实惠经典",image:image3,tag:3);
        
        let navArr=[nav1,nav2,nav3];
        let tabBarController=UITabBarController();
        tabBarController.viewControllers=navArr;
        self.window!.rootViewController=tabBarController;
        
        self.window!.makeKeyAndVisible()
        return true
    }

简单说明:

我们通过定义3个变量,声明了我们创建的3个Controller,通过设置UINavigationController的RootViewController,将3个Controller装载在3个UINavigationController中。

我们同时决定再将3个NavigationController放在另一个容器:UITabBarViewController中,

如:

        let navArr=[nav1,nav2,nav3];
        let tabBarController=UITabBarController();
        tabBarController.viewControllers=navArr;
        self.window!.rootViewController=tabBarController;

由于我们同样需要再TabBar上友好的显示对应的导航信息,所以我们给对应的UINavigationController设置了带图片带TabBarItem:

        let image1=UIImage(named:"h.png");
        nav1.tabBarItem=UITabBarItem(title:"完美食材",image:image1,tag:1);

程序跑起来,看看效果:

不加TabBarItem图片的效果:

bubuko.com,布布扣

设置TabBarItem后的效果:

bubuko.com,布布扣

(由于没有去网上找对应的图片,所以随便用了以前的一些图片将就下哈。)

虽然我们只是动了AppDelegate文件,但是一个常见的架子就呈现在我们面前了,

简单的通过IOS自带的一些预制的Controller容器搭起来了一个常见的APP架子,相比于另外的两个移动平台Android和wp,iOS在这方面做的确实不错,因为在移动这个小的窗体面前,我们的操作是有限的,预制的这20%的功能却减少了80%的事情,同时不会像Android的看着那么碎。

填充内容:

既然架子起来了,就该给对应的Controller填充内容了。

我们希望用户在点击下方3个有图标的TabBar的时候可以看到对应的3个创建的Controller的变化。

于是我们在每个的Controller中实现TableView:

class ThirdController:UIViewController,UITableViewDelegate,UITableViewDataSource

首先,按照国际惯例,我们对3个自建的Controller继承UITableVIewDelegate和UITableDataSource

熟悉.net的朋友看见datasource就会想到之前在webform或者winform使用Gride的时候都会定义对应的DataSource,所以只要记住,当我们想要呈现并使用Gride时就需要继承DataSource了,继承这两个代理之后就必须去实现两个方法:

    //实现继承的委托中的两个方法
    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int{
        return 100;
    }
    
    //返回Cell
    func tableView(tableView:UITableView!, cellForRowAtIndexPath indexPath:NSIndexPath!)->UITableViewCell!{
        let cellID="Cell ID";
        var cell=tableView.dequeueReusableCellWithIdentifier(cellID) as? UITableViewCell;
        
        return cell;
    }

第一个是返回table的行数(Int);

第二个是返回table中每一个的Cell;

接下来,我们模拟填充一个数组将TableView呈现出来:

    //预制数据
   var dataList=NSMutableArray();
    //放置并显示数据的TableView容器
    var _tableView:UITableView?;
    
    override func viewDidLoad(){
        super.viewDidLoad();
        self.title="实惠经典"
        
        for(var i=0;i<100;i++){
            dataList.addObject("第\(i)个实惠");
        }
        //拿到当前视图(view)的边界
        var rect:CGRect=self.view.bounds;
        _tableView=UITableView(frame:rect,style:.Plain);
        _tableView!.delegate=self;
        _tableView!.dataSource=self;
        self.view.addSubview(_tableView);
    }
    
    //实现继承的委托中的两个方法
    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int{
        return dataList.count;
    }
    
    //返回Cell
    func tableView(tableView:UITableView!, cellForRowAtIndexPath indexPath:NSIndexPath!)->UITableViewCell!{
        let cellID="Cell ID";
        var cell=tableView.dequeueReusableCellWithIdentifier(cellID) as? UITableViewCell;
        
        if(cell == nil){
            cell=UITableViewCell(style:.Default,reuseIdentifier:cellID);
        }
        
        var str=dataList.objectAtIndex(indexPath.row) as? String;
        cell!.textLabel.text=str;
        return cell;
    }

呈现结果:

bubuko.com,布布扣

这样我们就会看到点击不同的TabBar呈现了不同的Controller了。

我们想看看如何获取TableView对应的点击行,怎么办?

    //点中行事件
    func tableView(tableView:UITableView!,didSelectRowAtIndexPath indexpath:NSIndexPath!){
    println("第 \(indexpath.row)行被点击了");
    }

这样可以通过Console看到点击不同行之后的输出。

目录结构,通过文件夹建立一种MVC的赶脚:

bubuko.com,布布扣

整个简单的基于IOS自带的几种容器型Controller就这样出现了,结合IOS提供的便利,在加上可读性很强的swift使得iOS开发较以前真的方便好多啊。

[爱上Swift]第三弹:使用Swift建立App基本基石,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!