zoukankan      html  css  js  c++  java
  • ios swift模仿qq登陆界面,xml布局


    给大家推荐两个学习的地址:

    极客学院的视频:http://www.jikexueyuan.com/path/ios/

    一个博客:http://blog.csdn.net/lizhongfu2013/article/details/29210015


    主要想要实现一个模仿的登陆界面

    代码:

    //
    //  LoginViewController.swift
    //  IBM_LOGIN
    //
    //  Created by dcintern on 6/26/15.
    //  Copyright (c) 2015 dcintern. All rights reserved.
    //
    
    //import Foundation
    
    import UIKit
    
    class LoginViewController: UIViewController
    {
    
        
    
    
    /// 定义属性
    var QQNumber = UITextField()
    var PassNumber = UITextField()
    
    
    override func viewDidLoad() {
        
        self.view.backgroundColor = UIColor.whiteColor()
        super.viewDidLoad()
        
        // 添加头图片
        [self .addAllSubViews()];
    }
    
    // 添加所有子控件
    func addAllSubViews(){
        
        /// 平铺背景
        var headImage = UIImageView(frame: CGRectMake(0,0, 400, 800))
        headImage.image =  UIImage(named:"123.jpeg")
        self.view.addSubview(headImage)
        
        /// QQ号输入提示,暂时没有用到
        var phoneText = UILabel(frame: CGRectMake(30, 240, UIScreen.mainScreen().bounds.size.width-60, 30))
        phoneText.text = ""
        self.view.addSubview(phoneText)
        
        /// QQ号输入框
        var QQNumber = UITextField(frame: CGRectMake(30, 150, UIScreen.mainScreen().bounds.size.width-60, 30))
        QQNumber.placeholder = " username"
        QQNumber.layer.borderWidth = 2
        QQNumber.layer.borderColor = UIColor.lightGrayColor().CGColor
        QQNumber.layer.cornerRadius = 5
        QQNumber.keyboardType = UIKeyboardType.NumberPad
        self.view.addSubview(QQNumber)
        self.QQNumber = QQNumber
        
        /// 密码输入提示,暂时没用到
        var passText = UILabel(frame: CGRectMake(30, 300, UIScreen.mainScreen().bounds.size.width-60, 30))
        passText.text = ""
        self.view.addSubview(passText)
        
        /// 密码输入框
        var PassNumber = UITextField(frame: CGRectMake(30, 200, UIScreen.mainScreen().bounds.size.width-60, 30))
        PassNumber.placeholder = " password"
        PassNumber.layer.borderWidth = 2
        PassNumber.layer.borderColor = UIColor.lightGrayColor().CGColor
        PassNumber.layer.cornerRadius = 5
        self.view.addSubview(PassNumber)
        self.PassNumber = PassNumber
        
        /// 密码找回
        var button = UIButton(frame: CGRectMake(200, 360, 120, 30))
        UIButton.buttonWithType(UIButtonType.Custom)
        button.setTitle("忘记密码", forState: UIControlState.Normal)
        button.setTitleColor(UIColor.lightGrayColor(), forState: UIControlState.Normal)
        self.view.addSubview(button)
        button.addTarget(self, action: "onClick", forControlEvents: UIControlEvents.TouchUpInside)
        
    }
    
    /// 密码找回方法实现
    func onClick()
    {
        
        ///找回密码提示
        UIAlertView(title: "温馨提示", message: "新密码已发送至手机上", delegate: nil, cancelButtonTitle: "确定", otherButtonTitles: "取消").show()
    }
    /**
    点击界面键盘辞去第一响应者
    */
    override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
    {
        
        self.QQNumber.resignFirstResponder()
        self.PassNumber.resignFirstResponder()
    }
    
    }
    
    



     实现根据xml进行布局:

    import UIkit
    
    
    
    class LoginViewController :  UIViewController,NSXMLParserDelegate
    
    {
    
            
    
            ///
    
            
    
        
    
            /// 定义属性
    
            var m_Username = UITextField()
    
            var m_Password = UITextField()
    
        
    
        
    
            var m_backgroundRect = CGRectMake(0,0,0,0)
    
            var m_UsernameRect = CGRectMake(0,0,0,0)
    
            var m_PassWordRect = CGRectMake(0,0,0,0)
    
        
    
            var m_ConnectRect = CGRectMake(0,0,0,0)
    
            var m_ForgetRect = CGRectMake(0,0,0,0)
    
        
    
            var myActivityIndicator: UIActivityIndicatorView!
    
            
    
            override func viewDidLoad()
    
            {
    
                
    
                self.view.backgroundColor = UIColor.whiteColor()
    
                super.viewDidLoad()
    
                
    
                
    
                var parser = NSXMLParser(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("LoginLayout", ofType: "xml")!))
    
                
    
                parser?.delegate = self
    
                parser?.parse()
    
                // 添加头图片
    
                [self .addAllSubViews()];
    
            }
    
            
    
            // 添加所有子控件
    
            func addAllSubViews()
    
            {
    
                
    
                /// 平铺背景
    
               // var headImage = UIImageView(frame: m_backgroundRect)
    
               // headImage.image =  UIImage(named:"background.jpg")
    
                //self.view.addSubview(headImage)
    
                
    
                
    
               
    
                
    
                //float lightblue[]={0.6824f, 0.7882f, 1.0f, 1.0f};
    
                //var color = CGColorCreate(CGColorSpaceCreateDeviceRGB(), myColor)
    
                ServerAddress.layer.borderColor = UIColor.blackColor().CGColor
    
                ServerAddress.layer.cornerRadius = 5
    
                self.view.addSubview(ServerAddress)
    
                self.m_ServerAddress = ServerAddress
    
                
    
                /// username input textbox
    
                var Username = UITextField(frame: m_UsernameRect)
    
                Username.placeholder = " username"
    
                Username.layer.borderWidth = 2
    
                Username.layer.borderColor = UIColor.blackColor().CGColor
    
                Username.layer.cornerRadius = 5
    
                
    
                self.view.addSubview(Username)
    
                self.m_Username = Username
    
                
    
                /// password input textbox
    
                var Password = UITextField(frame: m_PassWordRect)
    
                Password.placeholder = " password"
    
                Password.layer.borderWidth = 2
    
                Password.layer.borderColor = UIColor.blackColor().CGColor
    
                Password.layer.cornerRadius = 5
    
                self.view.addSubview(Password)
    
                self.m_Password = Password
    
                
    
                /// confirm the connection button
    
                var confirmbutton = UIButton(frame: m_ConnectRect)
    
                UIButton.buttonWithType(UIButtonType.Custom)
    
                
    
                confirmbutton.setTitle("Connect", forState: UIControlState.Normal)
    
                confirmbutton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
    
                self.view.addSubview(confirmbutton)
    
                confirmbutton.addTarget(self, action: "onClickConfirm", forControlEvents: UIControlEvents.TouchUpInside)
    
                
    
    
    
                
    
                /// findback password button
    
                var button = UIButton(frame: m_ForgetRect)
    
                UIButton.buttonWithType(UIButtonType.Custom)
    
                button.setTitle("Forget password!", forState: UIControlState.Normal)
    
                button.setTitleColor(UIColor.lightGrayColor(), forState: UIControlState.Normal)
    
                self.view.addSubview(button)
    
                button.addTarget(self, action: "onClickFindPasswordBack", forControlEvents: UIControlEvents.TouchUpInside)
    
                
    
                
    
               // myActivityIndicator = UIActivityIndicatorView()
    
                
    
                //myActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    
                //myActivityIndicator.center = self.view.center;
    
                
    
                myActivityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .White)
    
                myActivityIndicator.frame = CGRectMake(self.view.frame.size.width/2 - 50, 250, 100, 100)
    
                myActivityIndicator.color = UIColor.blackColor()
    
                
    
                self.view.addSubview(myActivityIndicator);
    
                
    
            }
    
        
    
            ///on confirm connettion
    
            func onClickConfirm()
    
            {
    
            
    
            ///check if ip,username,passname is correct
    
               println(m_ServerAddress.text)
    
                //eares the space before and after
    
                
    
    
    
                
    
               
    
            }
    
        
    
            /// 密码找回方法实现
    
            func onClickFindPasswordBack()
    
            {
    
                
    
                ///找回密码提示, otherButtonTitles: "取消"这个参数如何传进去?
    
                UIAlertView(title: "温馨提示", message: "新密码已发送至手机上", delegate: nil, cancelButtonTitle: "确定").show()
    
            }
    
            /**
    
            点击界面键盘辞去第一响应者
    
            */
    
            override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
    
            {
    
                          self.m_Username.resignFirstResponder()
    
                self.m_Password.resignFirstResponder()
    
            }
    
            
    
            
    
            
    
            var currentNodeName:String!
    
            
    
            func parser(parser: NSXMLParser, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject : AnyObject]!)
    
            {
    
                
    
                currentNodeName = elementName
    
                
    
                //review the code using swith
    
                if elementName == "background"
    
                {
    
                    let x = CGFloat(((attributeDict["x"]! as String )as NSString).floatValue)
    
                    let y = CGFloat(((attributeDict["y"]! as String ) as NSString).floatValue)
    
                    let Width = CGFloat(((attributeDict["Width"]! as String )as NSString).floatValue)
    
                    let Height = CGFloat(((attributeDict["Height"]! as String ) as NSString).floatValue)
    
                    
    
                    m_backgroundRect = CGRectMake(x,y,Width,Height)
    
                    
    
                }
    
                else if(elementName == "ServerAddress")
    
                {
    
                    let x = CGFloat(((attributeDict["x"]! as String )as NSString).floatValue)
    
                    let y = CGFloat(((attributeDict["y"]! as String ) as NSString).floatValue)
    
                    let Width = CGFloat(((attributeDict["Width"]! as String )as NSString).floatValue)
    
                    let Height = CGFloat(((attributeDict["Height"]! as String ) as NSString).floatValue)
    
                    
    
                    m_ServerAddressRect = CGRectMake(x,y,Width,Height)
    
                }
    
    
    
                else if(elementName == "Username")
    
                {
    
                    let x = CGFloat(((attributeDict["x"]! as String )as NSString).floatValue)
    
                    let y = CGFloat(((attributeDict["y"]! as String ) as NSString).floatValue)
    
                    let Width = CGFloat(((attributeDict["Width"]! as String )as NSString).floatValue)
    
                    let Height = CGFloat(((attributeDict["Height"]! as String ) as NSString).floatValue)
    
    
    
                    m_UsernameRect = CGRectMake(x,y,Width,Height)
    
                }
    
                else if(elementName == "Password")
    
                {
    
                    let x = CGFloat(((attributeDict["x"]! as String )as NSString).floatValue)
    
                    let y = CGFloat(((attributeDict["y"]! as String ) as NSString).floatValue)
    
                    let Width = CGFloat(((attributeDict["Width"]! as String )as NSString).floatValue)
    
                    let Height = CGFloat(((attributeDict["Height"]! as String ) as NSString).floatValue)
    
    
    
                    m_PassWordRect = CGRectMake(x,y,Width,Height)
    
                }
    
                else if(elementName == "Connect")
    
                {
    
                    let x = CGFloat(((attributeDict["x"]! as String )as NSString).floatValue)
    
                    let y = CGFloat(((attributeDict["y"]! as String ) as NSString).floatValue)
    
                    let Width = CGFloat(((attributeDict["Width"]! as String )as NSString).floatValue)
    
                    let Height = CGFloat(((attributeDict["Height"]! as String ) as NSString).floatValue)
    
                    
    
                    m_ConnectRect = CGRectMake(x,y,Width,Height)
    
                }
    
                else if(elementName == "Forget")
    
                {
    
                    let x = CGFloat(((attributeDict["x"]! as String )as NSString).floatValue)
    
                    let y = CGFloat(((attributeDict["y"]! as String ) as NSString).floatValue)
    
                    let Width = CGFloat(((attributeDict["Width"]! as String )as NSString).floatValue)
    
                    let Height = CGFloat(((attributeDict["Height"]! as String ) as NSString).floatValue)
    
                    
    
                    m_ForgetRect = CGRectMake(x,y,Width,Height)
    
                }
    
    
    
            }
    
            
    
            func parser(parser: NSXMLParser, foundCharacters string: String!) {
    
                //        println(string)
    
                
    
                var str = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
    
                if str != ""{
    
                    println("current node : (currentNodeName),value : (str)")
    
                }
    
            }
    
            
    
            
    
            override func didReceiveMemoryWarning() {
    
                super.didReceiveMemoryWarning()
    
                // Dispose of any resources that can be recreated.
    
            }
    
        
    
        
    
        lazy var m_connect: ConnectServer? = {
    
            
    
            return ConnectServer()
    
            }()
    
        
    
    }
    
    
    
    
    
    
    
    
    



    xml:

    <LoginLayout>
        <background x="0" y="0" Width="400" Height="800">
            <Image name="background.jpg">  </Image>
        </background>
        
        
        <Username x="30" y="150" Width="300" Height="30">
        </Username>
        <Password x="30" y="200" Width="300" Height="30">
        </Password>
        
        
        
        <Connect x="30" y="250" Width="100" Height="30">
        </Connect>
        
        <Forget x="200" y="250" Width="200" Height="30">
        </Forget>
    </LoginLayout>



     对xml解析类的封装:

    NSXMLParser(data: data),这个有几种初始化的方法,但是string就不行,得转换成NSdata,还是比较蛋疼的


    //
    //  VMXMLParser.swift
    //  XMLParserTest
    //
    //  Created by Jimmy Jose on 22/08/14.
    //https://github.com/varshylmobile/VMXMLParser
    // Permission is hereby granted, free of charge, to any person obtaining a copy
    // of this software and associated documentation files (the "Software"), to deal
    // in the Software without restriction, including without limitation the rights
    // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    // copies of the Software, and to permit persons to whom the Software is
    // furnished to do so, subject to the following conditions:
    //
    // The above copyright notice and this permission notice shall be included in
    // all copies or substantial portions of the Software.
    //
    // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    // THE SOFTWARE.
    
    import Foundation
    
    // Todo: Add documentation
    class VMXMLParser: NSObject,NSXMLParserDelegate{
        
        private let kParserError = "Parser Error"
        private var activeElement = ""
        private var previousElement = "-1"
        private var previousElementValue = ""
        private var arrayFinalXML = NSMutableArray()
        private var dictFinalXML  = NSMutableDictionary()
        private var completionHandler:((tags:NSArray?, error:String?)->Void)?
        
        var lameMode = true
        
        var reoccuringTag:NSString = ""
        var m_Projects:[String] = []
        /**
        Initializes a new parser with url of NSURL type.
        
        :param: url The url of xml file to be parsed
        :param: completionHandler The completion handler
        
        :returns: Void.
        */
        
        override init() {
            
            super.init()
            
        }
        
        func parseXMLFromURL(url:NSURL,takeChildOfTag:NSString,completionHandler:((tags:NSArray?, error:String?)->Void)? = nil){
            
            self.reoccuringTag = takeChildOfTag
            VMXMLParser().initWithURL(url, completionHandler: completionHandler)
            
        }
        
        func parseXMLFromURLString(urlString:NSString,takeChildOfTag:NSString,completionHandler:((tags:NSArray?, error:String?)->Void)? = nil){
            self.reoccuringTag = takeChildOfTag
            
            initWithURLString(urlString, completionHandler: completionHandler)
        }
        
        
        func parseXMLFromData(data:NSData,takeChildOfTag:NSString,completionHandler:((tags:NSArray?, error:String?)->Void)? = nil){
            self.reoccuringTag = takeChildOfTag
            initWithContentsOfData(data, completionHandler:completionHandler)
            
        }
        
        
        class func initParserWithURL(url:NSURL,completionHandler:((tags:NSArray?, error:String?)->Void)? = nil){
            
            VMXMLParser().initWithURL(url, completionHandler: completionHandler)
            
        }
        
        class func initParserWithURLString(urlString:NSString,completionHandler:((tags:NSArray?, error:String?)->Void)? = nil){
            
            VMXMLParser().initWithURLString(urlString, completionHandler: completionHandler)
        }
        
        
        class func initParserWithData(data:NSData,completionHandler:((tags:NSArray?, error:String?)->Void)? = nil){
            
            VMXMLParser().initWithContentsOfData(data, completionHandler:completionHandler)
            
        }
        
        
        private func initWithURL(url:NSURL,completionHandler:((tags:NSArray?, error:String?)->Void)? = nil) -> AnyObject {
            
            parseXMLForUrl(url :url, completionHandler: completionHandler)
            
            return self
            
        }
        
        
        
        private func initWithURLString(urlString :NSString,completionHandler:((tags:NSArray?, error:String?)->Void)? = nil) -> AnyObject {
            
            let url = NSURL(string: urlString as String)!
            parseXMLForUrl(url :url, completionHandler: completionHandler)
            
            return self
        }
        
        private func initWithContentsOfData(data:NSData,completionHandler:((tags:NSArray?, error:String?)->Void)? = nil) -> AnyObject {
            
            initParserWith(data: data)
            
            return self
            
        }
        
        private func parseXMLForUrl(#url:NSURL,completionHandler:((tags:NSArray?, error:String?)->Void)? = nil){
            
            self.completionHandler = completionHandler
            
            beginParsingXMLForUrl(url)
            
        }
        
        private func beginParsingXMLForUrl(url:NSURL){
            
            let request:NSURLRequest = NSURLRequest(URL:url)
            
            let queue:NSOperationQueue = NSOperationQueue()
            
            NSURLConnection.sendAsynchronousRequest(request,queue:queue,completionHandler:{response,data,error in
                
                if(error != nil){
                    if(self.completionHandler != nil){
                        self.completionHandler?(tags:nil,error:error.localizedDescription)
                    }
                    
                }else{
                    
                    self.initParserWith(data: data)
                    
                }})
        }
        
        
        private func initParserWith(#data:NSData){
            
            var parser = NSXMLParser(data: data)
            parser.delegate = self
            
            var success:Bool = parser.parse()
            
            if success {
                
                if(self.arrayFinalXML.count > 0)
                {
                    if(self.completionHandler != nil)
                    {
                        self.completionHandler?(tags:self.arrayFinalXML,error:nil)
                    }
                }
                
            }
            else
            {
                
                if(self.completionHandler != nil)
                {
                    self.completionHandler?(tags:nil,error:kParserError)
                }
            }
            
        }
        
        internal func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
            activeElement = elementName;
            println(elementName)
            if elementName == "Project"
            {
                let name = (attributeDict["Name"]! as String )
                println(name)
                m_Projects.append(name)
                
            }
    
            if(reoccuringTag.isEqualToString(elementName)){
                
                dictFinalXML = NSMutableDictionary()
            }
        }
        
        internal func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
            
            if(reoccuringTag.length == 0){
                if((dictFinalXML.objectForKey(activeElement)) != nil){
                    
                    arrayFinalXML.addObject(dictFinalXML)
                    dictFinalXML = NSMutableDictionary()
                    
                }else{
                    
                    dictFinalXML.setValue(previousElementValue, forKey: activeElement)
                }
            }else{
                //println(elementName)
                if(reoccuringTag.isEqualToString(elementName)){
                    
                    arrayFinalXML.addObject(dictFinalXML)
                    dictFinalXML = NSMutableDictionary()
                    
                }else{
                    
                    dictFinalXML.setValue(previousElementValue, forKey: activeElement)
                    
                }
                
            }
            
            previousElement = "-1"
            previousElementValue = ""
            
        }
        
        
        internal func parser(parser: NSXMLParser, foundCharacters string: String?) {
    
            if var str = string as NSString? {
                str = str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
                
                if((previousElement as NSString).isEqualToString("-1")){
                    
                    previousElement = activeElement
                    previousElementValue = str as String
                    
                }else{
                    
                    if((previousElement as NSString).isEqualToString(activeElement)){
                        
                        previousElementValue = previousElementValue + (str as String)
                        
                    }else{
                        
                        previousElement = activeElement
                        previousElementValue = str as String
                    }
                }   
            }
        }
        
        
        internal func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError) {
            if(self.completionHandler != nil){
                self.completionHandler?(tags:nil,error:parseError.localizedDescription)
            }
        }
        
    }



  • 相关阅读:
    Windows 下安装 swoole 具体步骤
    Mysql 连接提示 Client does not support authentication protocol requested by server 客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
    mysql8 安装
    在 apache 配置 python-django
    QQWry.dat导入Mysql显IP程序
    PHP根据身份证号码判断星座性别生肖身份证号15位转18位
    layer---table 处理 方法设定使用 时间戳转换
    数字的处理 :小数点四舍五入
    javascript 检测手机设备 百度siteapp下的一款跳转的产品,使用起来很方便。你可以用这款JS跳转到手机版,也可以跳转到任何你想跳转的位置。
    基于Token的多平台身份认证价格设计
  • 原文地址:https://www.cnblogs.com/wangyaning/p/7853956.html
Copyright © 2011-2022 走看看