zoukankan      html  css  js  c++  java
  • swift:用UITabBarController、UINavigationController、模态窗口简单的搭建一个QQ界面

    搭建一个QQ界面其实是一个很简单的实现,需要几种切换视图的控制器组合一起使用,即导航控制器、标签栏控制器、模态窗口。其中,将标签栏控制器设置为window的rootViewController,因为QQ主界面有4个控制器,分别为消息、联系人、动态、我,那么创建这4个控制器,然后再为它们分别创建一个导航控制器。此时,将之前创建的那4个控制器分别设置为对应的导航控制的rootViewcontroller。最后,将这4个导航控制器设置为标签栏控制器的子控制器即可。除此之外,我们仍然需要再创建一个登录的控制器,添加文本框输入账号和密码,如果用户输入正确,那么就以模态窗口的方式模态出主界面的窗口即可,如果输入不正确,就弹出一个提示框,给出提示信息。

    具体的演示实例如下:

    1.创建一个swift工程,截图为:

    2.删除故事板中自带的控制器,然后创建需要的所有控制器并设置一下分组,截图为:

    3.在AppDelegate.swift中设置偏好,将账号和密码归档

        func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            
            //设置偏好,将账号和密码存入沙盒
            NSUserDefaults.standardUserDefaults().setValue("admin", forKey: "accountNum")
            NSUserDefaults.standardUserDefaults().setValue("123456", forKey: "password")
        
            //对窗体初始化
            self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
            
            //创建窗体的根控制器,将QQ的登录界面设置为根控制器
            var rootViewController:LoginViewController? = LoginViewController()
            self.window!.rootViewController = rootViewController!
            
            
            self.window!.makeKeyAndVisible()
            return true
        }

    4.在LoginViewController.swift中操作代码如下:

       //实现协议和声明属性

    class LoginViewController: UIViewController,UIAlertViewDelegate {
    
        //声明属性(图像视图、标签、按钮、文本框)
        var imageView:UIImageView?
        var labelAccountNum:UILabel?
        var labelPassWord:UILabel?
        var loginButton:UIButton?
        var textFiledAccountNum:UITextField?
        var textFiledPassWord:UITextField?

       //初始化控件

        override func viewDidLoad() {
            super.viewDidLoad()
    
            //初始化图像视图
            self.imageView = UIImageView(frame: CGRectMake(38, 30, 300, 300))
            self.imageView!.image = UIImage(named: "QQ.png")
            
            
            //初始化账号标签
            self.labelAccountNum = UILabel(frame: CGRectMake(50, 400, 40, 40))
            self.labelAccountNum!.text = "账号:"
            
            //初始化密码标签
            self.labelPassWord = UILabel(frame: CGRectMake(50, 450, 40, 40))
            self.labelPassWord!.text = "密码:"
            
            //初始化账号文本框
            self.textFiledAccountNum = UITextField(frame: CGRectMake(90, 400, 200, 40))
            self.textFiledAccountNum!.layer.cornerRadius = 5.0
            self.textFiledAccountNum!.backgroundColor = UIColor.grayColor()
            self.textFiledAccountNum!.placeholder = "请输入账号"
            self.textFiledAccountNum!.clearsOnBeginEditing = true
            self.textFiledAccountNum!.becomeFirstResponder()
            
            //初始化密码文本框
            self.textFiledPassWord = UITextField(frame: CGRectMake(90, 450, 200, 40))
            self.textFiledPassWord!.layer.cornerRadius = 5.0
            self.textFiledPassWord!.backgroundColor = UIColor.grayColor()
            self.textFiledPassWord!.placeholder = "请输入密码"
            self.textFiledPassWord!.clearsOnBeginEditing = true
            self.textFiledPassWord!.secureTextEntry = true
    
            //初始化登陆按钮
            self.loginButton = UIButton(frame: CGRectMake(90, 500, 200, 40))
            self.loginButton!.layer.cornerRadius = 8.0
            self.loginButton!.setTitle("登录", forState: .Normal)
            self.loginButton!.backgroundColor = UIColor.purpleColor()
            self.loginButton!.addTarget(self, action: "LoginButtonClicked:", forControlEvents: .TouchUpInside)
    
            
            //设置视图颜色
            self.view.backgroundColor = UIColor.whiteColor()
            
            //将控件都添加到子视图
            self.view.addSubview(self.imageView!)
            self.view.addSubview(self.labelAccountNum!)
            self.view.addSubview(self.labelPassWord!)
            self.view.addSubview(self.textFiledAccountNum!)
            self.view.addSubview(self.textFiledPassWord!)
            self.view.addSubview(self.loginButton!)
        }

      //实现登陆事件(匹配账号和密码、实现界面的跳转)

        //实现登陆按钮事件
        func LoginButtonClicked(sender:UIButton){
            
        //取出偏好设置的账号和密码
        let accountNum:String =  NSUserDefaults.standardUserDefaults().valueForKey("accountNum")as String
        let passWord:String = NSUserDefaults.standardUserDefaults().valueForKey("password") as String
        
        //进行账号和密码的匹配
        if self.textFiledAccountNum!.text == accountNum && self.textFiledPassWord!.text == passWord{
            
            //创建标签栏控制器
            let TabViewController:UITabBarController? = UITabBarController()
            TabViewController!.tabBar.backgroundColor = UIColor.darkGrayColor()
    
            
            //创建4个导航栏控制器
            let NavgationVC1:UINavigationController? = UINavigationController()
            let NavgationVC2:UINavigationController? = UINavigationController()
            let NavgationVC3:UINavigationController? = UINavigationController()
            let NavgationVC4:UINavigationController? = UINavigationController()
            
            
            //创建4个子控制器
            let newsVC:NewsViewController? = NewsViewController()
            let contactVC:ContactViewController? = ContactViewController()
            let activeVC:ActiveViewController? = ActiveViewController()
            let meVC:MeViewController? = MeViewController()
            
            
            //设置子控制器导航栏按钮标题
            newsVC!.navigationItem.title = "消息"
            contactVC!.navigationItem.title = "联系人"
            activeVC!.navigationItem.title = "动态"
            meVC!.navigationItem.title = "自己"
            
            
            //设置子控制器标签栏按钮标题
            newsVC!.title = "消息"
            contactVC!.title = "联系人"
            activeVC!.title = "动态"
            meVC!.title = "自己"
    
            
            
            //将4个子控制器分别推入对应的导航栏控制器
            NavgationVC1!.pushViewController(newsVC!, animated: true)
            NavgationVC2!.pushViewController(contactVC!, animated: true)
            NavgationVC3!.pushViewController(activeVC!, animated: true)
            NavgationVC4!.pushViewController(meVC!, animated: true)
            
           
           //设置标签栏按钮字体大小、选中和未选中时的颜色、偏移位置
            UITabBarItem.appearance().setTitleTextAttributes(
            [NSFontAttributeName:UIFont.systemFontOfSize(15),NSForegroundColorAttributeName:UIColor.purpleColor()], forState: .Normal)
            UITabBarItem.appearance().setTitleTextAttributes(
            [NSForegroundColorAttributeName:UIColor.redColor()], forState: .Selected)
            
            UITabBarItem.appearance().setTitlePositionAdjustment(UIOffsetMake(0, -10))
    
            
            //往标签栏控制器添加导航栏子控制器
            TabViewController!.addChildViewController(NavgationVC1!)
            TabViewController!.addChildViewController(NavgationVC2!)
            TabViewController!.addChildViewController(NavgationVC3!)
            TabViewController!.addChildViewController(NavgationVC4!)
            
            //模态出一个窗口
            self.presentViewController(TabViewController!, animated: true, completion: nil)
        }
        //输入不正确,就弹出一个提示框
        else{
            
            var alertView:UIAlertView? = UIAlertView(title: "提示信息", message: "账号或密码输入有误", delegate: self, cancelButtonTitle: "确认")
            
            alertView!.show()
         }
      }
    }

    5.在NewsViewcontroller.swift中创建表格,实现协议,选中单元格跳转到聊天界面

    import UIKit
    
    class NewsViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
    
        var tableView:UITableView?
        var arrayM:NSMutableArray?
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            //初始化
            self.tableView = UITableView(frame: self.view.frame)
            self.arrayM = NSMutableArray()
            for i in 0..<15{
                self.arrayM!.addObject("News--(i)")
            }
            
            //设置数据源和代理
            self.tableView!.dataSource = self
            self.tableView!.delegate = self
            
            //设置视图背景颜色
            self.view.backgroundColor = UIColor.whiteColor()
            
            //添加到视图
            self.view.addSubview(self.tableView!)
        }
    
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 15
        }
        
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            
            //设置单元格重用标识符
            let identifier = "Cell"
            
            //首先从队列中去取
            var cell :UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(identifier) as? UITableViewCell
            
            //如果没有从队列中获取到,那么就重新创建一个
            if cell == nil{
                
                cell = UITableViewCell(style: .Subtitle, reuseIdentifier: identifier)
            }
            
            //设置单元格内容
            cell!.textLabel!.text = String(self.arrayM!.objectAtIndex(indexPath.row) as NSString)
            cell!.backgroundColor = UIColor.grayColor()
            
            //返回重用单元格
            return cell!
        }
        
        
        //代理协议的方法
        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            
            //创建聊天控制器
            let ChatVC:ChatViewController? = ChatViewController()
            
            //将聊天控制器压入栈中
            self.navigationController!.pushViewController(ChatVC!, animated: true)
            
            //获取选中的单元
            var cell:UITableViewCell? = tableView.cellForRowAtIndexPath(indexPath)
            cell!.selected = false
        }
        
    }

    6.在ContactViewcontroller.swift中创建表格,实现协议,选中单元格跳转到聊天界面

    import UIKit
    
    class ContactViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
    
        var tableView:UITableView?
        var arrayM:NSMutableArray?
        
        override func viewDidLoad() {
            super.viewDidLoad()
    
            //初始化
            self.tableView = UITableView(frame: self.view.frame)
            self.arrayM = NSMutableArray()
            for i in 0..<15{
                self.arrayM!.addObject("Contact--(i)")
            }
            
            //设置数据源和代理
            self.tableView!.dataSource = self
            self.tableView!.delegate = self
            
            //设置视图背景颜色
            self.view.backgroundColor = UIColor.whiteColor()
            
            //添加到视图
            self.view.addSubview(self.tableView!)
        }
        
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 15
        }
        
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            
            //设置单元格重用标识符
            let identifier = "Cell"
            
            //首先从队列中去取
            var cell :UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(identifier) as? UITableViewCell
            
            //如果没有从队列中获取到,那么就重新创建一个
            if cell == nil{
                
                cell = UITableViewCell(style: .Subtitle, reuseIdentifier: identifier)
            }
            
            //设置单元格内容
            cell!.textLabel!.text = String(self.arrayM!.objectAtIndex(indexPath.row) as NSString)
            cell!.backgroundColor = UIColor.greenColor()
            
            //返回重用单元格
            return cell!
        }
        
        
        //代理协议的方法
        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            
            //创建聊天控制器
            let ChatVC:ChatViewController? = ChatViewController()
            
            //将聊天控制器压入栈中
            self.navigationController!.pushViewController(ChatVC!, animated: true)
            
            //获取选中的单元
            var cell:UITableViewCell? = tableView.cellForRowAtIndexPath(indexPath)
            cell!.selected = false
        }
    }

    7.在ActiveViewcontroller.swift中创建表格,实现协议,选中单元格跳转到聊天界面

    import UIKit
    
    class ActiveViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
    
        var tableView:UITableView?
        var arrayM:NSMutableArray?
        
        override func viewDidLoad() {
            super.viewDidLoad()
    
            //初始化
            self.tableView = UITableView(frame: self.view.frame)
            self.arrayM = NSMutableArray()
            for i in 0..<15{
                self.arrayM!.addObject("Active--(i)")
            }
            
            //设置数据源和代理
            self.tableView!.dataSource = self
            self.tableView!.delegate = self
            
            //设置视图背景颜色
            self.view.backgroundColor = UIColor.whiteColor()
            
            //添加到视图
            self.view.addSubview(self.tableView!)
        }
        
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 15
        }
        
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            
            //设置单元格重用标识符
            let identifier = "Cell"
            
            //首先从队列中去取
            var cell :UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(identifier) as? UITableViewCell
            
            //如果没有从队列中获取到,那么就重新创建一个
            if cell == nil{
                
                cell = UITableViewCell(style: .Subtitle, reuseIdentifier: identifier)
            }
            
            //设置单元格内容
            cell!.textLabel!.text = String(self.arrayM!.objectAtIndex(indexPath.row) as NSString)
            cell!.backgroundColor = UIColor.cyanColor()
            
            //返回重用单元格
            return cell!
        }
    
        
        //代理协议的方法
        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            
            //创建聊天控制器
            let ChatVC:ChatViewController? = ChatViewController()
            
            //将聊天控制器压入栈中
            self.navigationController!.pushViewController(ChatVC!, animated: true)
            
            //获取选中的单元
            var cell:UITableViewCell? = tableView.cellForRowAtIndexPath(indexPath)
            cell!.selected = false
        }
    }

    8.在MeViewcontroller.swift中创建表格,实现协议,选中单元格跳转到聊天界面

    import UIKit
    
    class MeViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
    
        var tableView:UITableView?
        var arrayM:NSMutableArray?
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            //初始化
            self.tableView = UITableView(frame: self.view.frame)
            self.arrayM = NSMutableArray()
            for i in 0..<15{
                self.arrayM!.addObject("Me--(i)")
            }
            
            //设置数据源和代理
            self.tableView!.dataSource = self
            self.tableView!.delegate = self
            
            //设置视图背景颜色
            self.view.backgroundColor = UIColor.whiteColor()
            
            //添加到视图
            self.view.addSubview(self.tableView!)
        }
        
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 15
        }
        
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            
            //设置单元格重用标识符
            let identifier = "Cell"
            
            //首先从队列中去取
            var cell :UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(identifier) as? UITableViewCell
            
            //如果没有从队列中获取到,那么就重新创建一个
            if cell == nil{
                
                cell = UITableViewCell(style: .Subtitle, reuseIdentifier: identifier)
            }
            
            //设置单元格内容
            cell!.textLabel!.text = String(self.arrayM!.objectAtIndex(indexPath.row) as NSString)
            cell!.backgroundColor = UIColor.orangeColor()
            
            //返回重用单元格
            return cell!
        }
    
        
        //代理协议的方法
        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            
            //创建聊天控制器
            let ChatVC:ChatViewController? = ChatViewController()
            
            //将聊天控制器压入栈中
            self.navigationController!.pushViewController(ChatVC!, animated: true)
            
            //获取选中的单元
            var cell:UITableViewCell? = tableView.cellForRowAtIndexPath(indexPath)
            cell!.selected = false
        }
    }

    9.设置聊天界面ChatViewController.swift的背景颜色和标题

    import UIKit
    
    class ChatViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            
            self.title = "聊天"
            self.view.backgroundColor = UIColor.purpleColor()
        }

    演示结果截图:

    开始时:                                 输入错误时:

      

    输入正确后显示第一个界面:                                   选择第二个界面:

       

    选择第三个界面:                                                       选择第四个界面:

        

    随意在一个界面,点击一个单元格,进入聊天界面:   点击自己这个按钮,返回:

         

  • 相关阅读:
    ubuntu 16.04 启用root用户方法
    多线程编程理论基础
    return ,throw Exception final 在流程控制中的应用
    .NET之特性(Attribute)
    C#事件与委托机制分析
    程序设计中的异常处理(Exception)
    浅谈.net 内存泄露和内存溢出
    C#高级特性之 泛型 扩展方法 Lamda表达式
    packages.config
    C#多线程中的异常处理
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4908706.html
Copyright © 2011-2022 走看看