UI阶段第一周笔记

程序的启动

// 程序的入口
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    
    // 如果不在这个方法中去创建window,并且把创建的window作为应用程序的主窗口。那么应用程序会自动去通过Main.storyboard去创建window并且启动Main.storyboard中箭头指向的界面
    
    // iOS开发中每个程序都有一个window作为应用程序展示界面的平台(iOS程序中一般只有一个主窗口)
    
    // 如果在这个方法中创建window,那么应用程序启动后就会去加载我们创建的window的内容
    
    // 创建UIWindow对象
    self.window = UIWindow()
    
    // 设置window的frame
    self.window?.frame = UIScreen.mainScreen().bounds
    
    // 设置rootViewController
    self.window?.rootViewController = UIViewController()
    
    // 设置window的背景颜色
    self.window?.backgroundColor = UIColor.yellowColor()
    
    // 将window作为应用程序的主窗口
    self.window?.makeKeyWindow()
    return true
}

UIView的基本属性和方法

class ViewController: UIViewController {

// 视图控制器中View加载成功后会调用的方法
override func viewDidLoad() {
    super.viewDidLoad()
    
//UIView是iOS中所有控件(视图)直接或者间接的父类。所以UIView中属性和方法,其他UIView的子类都拥有。
    
    // 1.创建UIView对象
    // 使用不带参的构造方法来创建UIView对象
    var view1:UIView = UIView()
    
    // 通过传frame来创建一个UIView的对象
//view1 = UIView.init(frame: <#T##CGRect#>)
    
    
    // 2.设置frame(所有的视图想要显示在界面上必须设置frame属性) -> 默认是(0,0,0,0)
    // frame中坐标是以手机频幕的左上角为原点来计算的
    // CGRect类型:是由一个通过x,y组成CGPoint结构和一个由width和height组成的CGSize结构体。通过组成的一个结构体。
    // CGRect -> CGPoint(x,y) + CGSize(width,height)
    // UI中所有的结构体都有一个对应的Make方法,来快速的创建结构体变量
    
    // (x,y) 坐标
    // (width,height) 大小    ***
    view1.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
    view1.frame = CGRectMake(50, 50, 100, 100)
    
    // 3.addSubView方法       ***
    // 将view1显示在视图控制器的view上
    self.view.addSubview(view1)
    
    // 4.背景颜色(默认是白色、透明)
    view1.backgroundColor = UIColor.cyanColor()
    
    
    // 5.设置tag值(默认值是0)
    // tag值的作用是用来区分当前界面上不同的视图
    view1.tag = 1
    
    
    
    // 练习:再创建一个视图显示在界面上(能在界面上看得见)
    // 注意:坐标是相对的。视图被添加到那个视图上,那么坐标就是相对于谁来算的
    var view2 = UIView.init(frame:CGRectMake(100 , 100, 100, 100))
    // 设置背景颜色
    view2.backgroundColor = UIColor.yellowColor()
    // 显示在界面
    // self.view.addSubview(view2) // 视图被添加到view上
    view1.addSubview(view2) // 视图被添加到view1上
    
}

UIView坐标相关

// ===========center属性==========
    // 中心点的坐标
    print(view1.center)
    // 改变中心点的坐标会改变视图的frame的x,y值;不会改变视图的大小
    view1.center = CGPointMake(220, 220)
    print(view1.frame)
    
    
    // ===========bounds属性==========
    // 1.默认情况下,bounds中的坐标都是(0,0),大小和frame的大小一样
    print(view1.bounds)
    
    view1.bounds = CGRectMake(0, 0, 200, 200)
    // 2.改变bounds的值的大小,会直接影响frame的大小;通过中心点不变而去影响frame的坐标
    print("center:\(view1.center)")
    print("frame:\(view1.frame)")
    
    // 3.改变bounds的坐标不会影响frame的坐标和大小;只会影响当前视图上的子视图的原点位置
    view1.bounds = CGRectMake(-10, -10, 200, 200)
    print("center:\(view1.center)")
    print("frame:\(view1.frame)")
    
    // 在view1上添加一个子视图
    let view2 = UIView.init(frame: CGRectMake(0, 0, 80, 80))
    view2.backgroundColor = UIColor.redColor()
    view1.addSubview(view2)
    
    // 总结:一般不会去设置bounds的值。只会在需要拿到当前视图的大小,并且坐标是(0,0)的情况下使用bounds属性
    
    
    // ===========transform(形变)==========
    // 形变不管多少种形变对一个值进行设置,都只形变最后一个
    // 子类视图会和父类视图一起发生形变,前提是对父视图做形变
    // 1.缩放
    // 参数1:x方向的缩放比例
    // 参数2:y方向的缩放比例
    view1.transform = CGAffineTransformMakeScale(0.6, 0.6)
    
    
    // 2.旋转
    // 参数:旋转角度(相对PI的角度)
    view1.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2)/2)
    
    
    // 3.平移
    // 参数1:在x方向的平移距离, x方向为正->往右移;为负->往左移
    // 参数2:在y方向的平移距离, y方向为正->往下移;为负->往上移
    view1.transform = CGAffineTransformMakeTranslation(-80, 200)
    
    
    // 4.同时进行多种形变
    // 旋转缩放
    view1.transform = CGAffineTransformRotate(CGAffineTransformMakeScale(2, 0.6), CGFloat(M_PI_2)/2)
    
    
    // 旋转缩放平移
    view1.transform = CGAffineTransformTranslate(view1.transform, 100, 20)

}

UIView动画

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    
    
    // 1.创建一个UIView对象
    let view1 = UIView.init(frame: CGRectMake(100, 100, 100, 100))
    
    view1.backgroundColor = UIColor.redColor()
    self.view.addSubview(view1)

    
//        // 2.UIView动画
//        // 参数1:动画时间(单位:秒)-    传一个Double类型的数值
//        // 参数2:闭包,在这里面主要去设置动画结束时的状态
//
//        // 功能:将视图原来的状态,在指定时间内变成结束时的状态
//        UIView.animateWithDuration(10) { () -> Void in
//            view1.transform = CGAffineTransformMakeRotation(CGFloat(M_2_PI))
//            // 写动画结束时的状态
//            // 只能改变视图坐标和大小相关属性(包括frame、center、形变)、颜色、透明度
//            
//            // 通过动画效果将view1的坐标和大小改成下面的状态
//            view1.frame = CGRectMake(100, 400, 40, 50)
//            
//            // 动画的改变视图的透明度
//            // 透明度:0(完全透明)~1(不透明),默认是1
//            view1.alpha = 1
//            
//            
//        }
    
    // 参数1:动画时间
    // 参数2:设置动画结束时视图状态对应的闭包
    // 参数3:闭包的可选类型,这个闭包会在动画结束后自动调用
    UIView.animateWithDuration(3, animations: { () -> Void in
        // 动画结束时视图的状态
        view1.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4))
        }) { (b) -> Void in
        // 动画结束后要执行的操作
            view1.transform = CGAffineTransformMakeRotation(CGFloat(M_2_PI))
        // 动画的让视图的状态回到最初的状态
            UIView.animateWithDuration(3, animations: { view1.transform = CGAffineTransformMakeRotation(CGFloat(0))
    })
            
   }

    
    // 创建一个视图view2
    let view2 = UIView.init(frame: CGRectMake(100, 200, 80, 80))
    view2.backgroundColor = UIColor.orangeColor()
    self.view.addSubview(view2)
    
    
    // 参数1:动画时间
    // 参数2:延迟时间
    // 参数3:动画选项;Repeat选项可以是视图通过动画的形式来回到原状态和动画结束状态之间来回切换,但是从结束状态回到原来状态的时候是没有动画的。Autoreverse使用自动动画的回到原来的状态   ****在给参数3写参数的时候需要先写一个空的数组[],然后先空格在点出系统的选项,根据需要选取
    // 参数4:设置动画结束视图状态对应的闭包
    // 参数5:动画结束后需要执行的操作队形的闭包
    // CurveLinear不停顿
    UIView.animateWithDuration(1, delay: 1, options: [ .Repeat, .CurveLinear], animations: { () -> Void in
        
        view2.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
        
        
        
        }, completion: nil)

  }

}

如何获取一个视图上的所有的子视图和通过一个视图获取指定视图的父视图

// a.获取一个视图上所有的子视图
    let subviews = self.view.subviews


    // b.通过一个视图获取指定视图的父视图
    // 关键字superview
    let view11 = view2.superview
    view11?.backgroundColor = UIColor.orangeColor()
    
    let view3 = view1?.superview
    view3?.backgroundColor = UIColor.lightGrayColor()
    
    
    // c.通过父视图去移除一个视图(将一个视图从它的父视图上移除)
    // 将view2从它的父视图上移除;如果将一个视图从父视图上移除,那么这个视图上的所有的子视图也会跟着一起移除
    //view1!.removeFromSuperview()
    
    
    // d.获取当前应用的主窗口(可以通过应用程序界面上所有的视图,直接拿到当前应用的唯一的主窗口,但是前提是当前这个视图在获取主窗口的时候已经显示在界面上)
    let window = view1?.window
    print(window)
}



// 界面已经显示出来的时候会调用
override func viewDidAppear(animated: Bool) {
    
    super.viewDidAppear(animated)
    // 在这儿view4已经显示在界面上了,所以可以拿到window
    let window = self.view4.window
    print(window)
}

视图的层次关系

默认情况下,后添加的视图会覆盖先添加的视图(前提:后添加的视图和先添加的视图有公共部分)

   // 1. 将显示在底层的视图显示在上面
    // 前提是:放在创建所有视图结束后
    // 将指定视图显示在最上面
//        self.view.bringSubviewToFront(view1)
    
    // 将指定视图显示在最下面
//        self.view.sendSubviewToBack(view4)

如果被插入的视图在插入前没有添加到界面,插入的时候会现将视图添加到界面上,然后再改变层次关系

// 3.将指定的视图插入到另外一个视图的上面
//  self.view.insertSubview(view5, aboveSubview: view1)
    
// 4.将指定的视图插入到另外一个视图的下面
    self.view.insertSubview(view5, belowSubview: view1)

UILabel

UILabel是一个类,继承自UIView;UIVIew的相关属性和方法,UILabel也拥有

//*************实际开发中常用重点***************
    // 使用自己的字体库的步骤
    // a.将ttf字体文件拖到工程中
    // b.将字体文件名在info.plist文件中通过"Fonts provided by applocation"加添进去
    // c.找到被添加的字体对应的字体名(1.通过字体册去看 2.通过打印familyNames去找)
    // d.通过下面的方法去使用字体
    
    // 通过字体名和字号来确定字体
    label1.font = UIFont(name: "AaShuangYuzuo", size: 25)





// ===========label专有属性和方法===========
    // 1.text属性(label的核心属性)  显示在label上的文字,类型字符串
    label1.text = "hellow world,你好世界,你好吗 不好吗"
    print(label1.text)
    
    // 2.font属性
    // 设置label上显示的文字的字体
    label1.font = UIFont.systemFontOfSize(30)  //系统字体,可以设置字体大小
    
    label1.font = UIFont.systemFontOfSize(30, weight: 0.8) //系统字体,可以设置字体大小,同时可以设置文字的粗细(粗细取值范围0~1)
    
    label1.font = UIFont.boldSystemFontOfSize(30) //系统黑体,可以设置字体大小
    
    label1.font = UIFont.italicSystemFontOfSize(30)  //系统斜体,可以设置字体大小
    
    // 获取当前应用程序所支持的所有的字体名
    let fontArray = UIFont.familyNames()
    print(fontArray)




// 3.textColor属性
    // 文字颜色属性
    label1.textColor = UIColor.yellowColor()
    
    // 4.shadowColor阴影颜色属性
    label1.shadowColor = UIColor.grayColor() //阴影颜色
    label1.shadowOffset = CGSizeMake(0, 0)  //阴影的偏移
    
    // 5.设置对齐方式
    // .Left     //左对齐(默认)
    // .Right    //右对齐
    // .Center   //居中
    label1.textAlignment = .Left
    
    
    // 6.设置文字高亮颜色
    // label正常情况下不是高亮状态
    label1.highlightedTextColor = UIColor.redColor()
    
    // 设置label的状态是否是高亮,当在点击文字的时候文字颜色会变成高亮设置的颜色 , 前提是设置为true
    label1.highlighted = false
    
    
    label1.text = "his determines the number of lines "
    
    // 7.设置行数
    // 行数设置为N(>= 1),在label足够高,文字足够多的情况下就用N行显示
    // 当行数设置为0的时候,label会根据高度和文字自动换行
    label1.numberOfLines = 1
    
    
    // 8.设置换行模式
    //ByCharWrapping  //以字符为单位换行,如果文字在指定行数内显示不全,后面的内容直接省略不显示(没有省略号,会将单词截断)
    //ByWordWrapping  //以单词为单位换行,如果文字在指定行数内显示不全,后面的内容直接省略不显示(没有省略号)
    //ByClipping      //以单词为单位换行,如果文字在指定行数内显示不全,后面的内容直接省略不显示(没有省略号,会将单词截断)
    //ByTruncatingTail、ByTruncatingMiddle、ByTruncatingHead  //以单词为单位换行,显示不全的部分会在不同的位置使用省略号代替
    label1.lineBreakMode = .ByTruncatingHead
    
    // 9.让文字通过自动设置字体大小,让文字可以在label上完整的显示(只针对行数为一行才有效)
    label1.adjustsFontSizeToFitWidth = true
UI阶段第一周笔记_第1张图片
屏幕快照 2016-08-14 下午5.03.59.png

UIImageView

// UIImageView是继承自UIVIew的一个类,UIView的属性和方法UIImageView都拥有

1.image属性(核心属性)
    // a.通过图片名去创建一个图片对象(最常用),这个方法要求:图片必须导入到工程中,如果图片是png格式图片,图片名的后缀可以省略,但是其他格式的图片都不能省略
    imageView1.image = UIImage.init(named: "back2.jpg")



// b.通过图片地址去创建一张图片,要求图片必须导入到工程中
    // NSBundle.mainBundle()  拿到包文件
    // 参数1:文件名
    // 参数2:文件后缀
    // 这个方法后缀不管什么格式,后缀都不能省略
    let path = NSBundle.mainBundle().pathForResource("back2", ofType: "jpg")  // 常用这个方法
    
    
   //  也可以用这个方式来写 NSBundle.mainBundle().pathForResource("back2.jpg", ofType: nil)
    
    
    if let path2 = path {
        
        imageView1.image = UIImage.init(contentsOfFile: path2)
    }
    else {
       
        imageView1.image = nil
        print("找不到对应图片")
    }

设置高亮状态下的图片

imageView1.highlightedImage = UIImage.init(named: "button_right")
    
    //设置imageView1为高亮状态(true -> 高亮),(false -> 不是高亮)
    imageView1.highlighted = false

imageView1的帧动画

// 4.imageView1的帧动画
    // a.设置动画数组
    // 创建图片数组
    var imageArray:[UIImage] = [UIImage]()
    for item in 1...18 {
        
        let imageName = "DOVE " + "\(item).png"
        let image = UIImage.init(named: imageName)
        imageArray.append(image!)
    }
    
    // 设置动画数组
    imageView1.animationImages = imageArray
    
    // b.设置动画时间(单位:秒)
    imageView1.animationDuration = 0.00001
    
    // c.设置重复次数 (N>=1) 就重复N次
    // 如果设置为0,就可以无限循环播放动画
    imageView1.animationRepeatCount = 0
    
    // d.开始动画
    imageView1.startAnimating()
    // e.停止动画
    // imageView1.stopAnimating()
    
    
    // f.判断是否正在播放动画
    let ret = imageView1.isAnimating()
    if ret {

        print("正在播放帧动画")

定时器NSTimer

class ViewController: UIViewController {

// 将imageView1声明成类的属性,可以在当前类的任何变量方法中使用
var imageView1:UIImageView = UIImageView()

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 搭建界面
    self.creatUI()
    
    // 创建定时器
    // 参数1: 定时时间(单位:秒)
    // 参数2: 调用方法的对象  (方法是参数3的方法)   当前类的方法就写self
    // 参数3: 定时时间到了之后自动调用的方法  ()
    // 参数4: nil
    // 参数5: 是否重复  self每隔参数1的时间去调用一个timmer函数(每隔0.03秒执行一个self.timmer())
    // 如果定时器到时调用的方法带参,只能带一个参,并且参数类型是NSTimer类型,因为这个方法的实参是当前创建出来的NSTimer对象
    let time = NSTimer.scheduledTimerWithTimeInterval(0.03, target: self, selector: Selector("timmer2:"), userInfo: "aaa", repeats: true)
    
    // 继续
//       time.fireDate = NSDate.distantPast()
    // 暂停
    time.fireDate = NSDate.distantFuture()
    
}

// MARK: - 定时器到时会调用的方法

// 带参的方法只能带一个参数;类型必须是NSTimer
func timmer2(timmer:NSTimer) {
    
    print(timmer.userInfo)
}

func timmer() {
    
    //print("到时")
    //改变图片的位置
    //1.先拿到图片原来的位置
    let frame = imageView1.frame
    
    
    imageView1.frame = CGRectMake(frame.origin.x + 10, frame.origin.y, frame.size.width, frame.size.height)
    
    if imageView1.frame.origin.x > self.view.frame.size.width {
        
        imageView1.frame.origin.x = -30
    }
    
    
}


// MARK: - 创建界面
func creatUI() {
    
    // 创建一个UIImageView对象
    imageView1 = UIImageView.init(frame: CGRectMake(30, 100, 121, 96))
    //imageView1.backgroundColor = UIColor.redColor()
    // 添加到界面上
    self.view.addSubview(imageView1)
    // 设置静态图片
    //imageView1.image = UIImage.init(named: "DOVE 1")
    // 创建动画数组
    var imageArray:[UIImage] = [UIImage]()
    for item in 1...18 {
        
        let imageName = UIImage.init(named: "DOVE " + "\(item)")
        imageArray.append(imageName!)
        
    }
    
    imageView1.animationImages = imageArray
    // 设置动画相关属性
    imageView1.animationRepeatCount = 0
    imageView1.animationDuration = 0.2
    // 开始动画
    imageView1.startAnimating()
    
    
}

UIButton

// UIButton是继承自UIVIew的一个类,UIView的属性和方法UIButton都拥有

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    
    // UIButton:UIControl:UIView
   self.imageButton()
   //self.textAndImageButton()


}



//MARK: - 文字和图片同时存在

func textAndImageButton() {
    
    // ============从UIView继承下来的属性=============
    
    // (1)图片在左文字在右
    // 1.创建button对象
    let button = UIButton.init(frame: CGRectMake(100, 100, 200, 100))
    // 2.添加到界面上
    self.view.addSubview(button)
    
    // 3.设置图片属性
    button.setImage(UIImage.init(named: "player_down_1"), forState: .Normal)
    
    // 4.设置文字属性
    button.setTitle("战士", forState: .Normal)
    button.setTitleColor(UIColor.redColor(), forState: .Normal)
    
    
    // (2)图片在下层,文字在上层
    // 1.创建button对象
    let button2 = UIButton.init(frame: CGRectMake(100, 250, 200, 100))
    // 2.添加到界面上
    self.view.addSubview(button2)
    
    // 3.设置按钮的背景图片
    // setBackgroundImage
    button2.setBackgroundImage(UIImage.init(named: "player_down_1"), forState: .Normal)
    
    // 4.设置按钮文字
    button2.setTitle("战士", forState: .Normal)
    
    button2.setTitleColor(UIColor.blueColor(), forState: .Normal)
    
    
    
}



// MARK: - 图片按钮
func imageButton() {
    
    // ============从UIView继承下来的属性=============
    
    // 1.创建button对象
    let button = UIButton.init(frame: CGRectMake(100, 100, 100, 100))
    // 2.添加到界面上
    self.view.addSubview(button)
    
    // ============按钮专有的属性=============
    
    // 1.设置按钮上的图片
    // 参数1:显示在按钮上的图片
    // 参数2:按钮状态
    // 设置按钮正常状态下的图片
    button.setImage(UIImage.init(named: "map"), forState: .Normal)
    // 设置按钮高亮状态下的图片
    button.setImage(UIImage.init(named: "button_down"), forState: .Highlighted)
    // 设置按钮选中状态下的图片
    button.setImage(UIImage.init(named: "button_up"), forState: .Selected)
    
    // 是否是选中状态
    button.selected = false
    
    
    // 关闭用户交互
    // 按钮默认是true -> 可以进行用户交互
//        button.userInteractionEnabled = false
    
    
    // enabled 如果设置为false,控件不能工作
//        button.enabled = true
    
    
}





// MARK: - 文字按钮
func textButton() {
    
    // ============从UIView继承下来的属性=============
    
    // 1.创建button对象
    let button = UIButton.init(frame: CGRectMake(100, 100, 150, 80))
    
    // 2.添加到界面上
    self.view.addSubview(button)
    
    // 3.设置背景颜色
    button.backgroundColor = UIColor.redColor()
    
    
    // 系统的按钮中有一个label专门用来负责显示文字,还有一个imageView专门用来负责显示图片
    //        button.titleLabel
    //        button.imageView
    
    // ============按钮专有的属性=============
    
    // 1.文字按钮
    // a.设置文字属性
    // 给按钮设置文字的时候,必须使用下面这个方法来给按钮的不同状态去设置文字
    // 参数1:需要显示在按钮上的文字
    // 参数2:按钮状态。一个按钮有:正常状态(按钮处于不被操作的时候的状态)、高亮状态(按钮被按下没有松开时的状态)、选中状态(按钮按下就一直处于选中时的状态,松开也不会弹起)
    
    // 设置按钮正常状态下的文字为"正常";如果只设置正常状态下的内容,那么其他状态的效果和正常状态一样
    button.setTitle("正常", forState: .Normal)
    // 设置按钮高亮状态下的文字
    button.setTitle("高亮", forState: .Highlighted)
    // 设置按钮选中状态下的文字
    button.setTitle("选中", forState: .Selected)
    // 让按钮成为选中状态
    // true -> 选中: false -> 不选中(默认)
    button.selected = false
    
    // b.设置按钮上文字颜色
    // 设置正常状态下文字颜色
    button.setTitleColor(UIColor.blackColor(), forState: .Normal)
    // 设置高亮状态下文字颜色
    button.setTitleColor(UIColor.blueColor(), forState: .Highlighted)
    
    // c.文字字体
    button.titleLabel?.font = UIFont.systemFontOfSize(30)
    
    // d.设置对齐方法
    button.titleLabel?.textAlignment = .Left
    // 总结:除了按钮上的文字和文字颜色以外,其他和文字相关的属性都可以使用button上的titleLabel去设置
  
}

}

UIButton的核心属性

UITextField

// UITextField是继承自UIVIew的一个类,UIView的属性和方法UITextField都拥有

//============textField专有属性=============
    // a.文字相关
    // 1.text属性
    textField.text = "输入框"
    // 通过这个属性去拿到textField中的输入信息
    print(textField.text)
    
    // 2.placeHolder  (点击输入框就没有请输入账号了,提示作用)
    textField.placeholder = "请输入账号"
    
    // 3.是否密文输入
    // true -> 密文输入
    // false -> 明文输入
    textField.secureTextEntry = false
    
    // 4.设置文字颜色
    textField.textColor = UIColor.redColor()
    
    // 5.设置字体
    textField.font = UIFont.systemFontOfSize(20)
    
    
    // b.显示相关
    // 1.设置边框样式
    //None   无边框
    //Line   黑色的直角边框
    //Bezel  直角表框带凹陷效果
    //RoundedRect   浅灰色带圆角的边框
    textField.borderStyle = .RoundedRect
    
    // 2.开始编辑的时候是否清空输入框
    // true -> 每次点击输入框都将输入框中原来的文字清空
    // false -> 每次点击输入框都将输入框中原来的文字不清空
    textField.clearsOnBeginEditing = true
    
    // 3.设置清除按钮模式
    // Never  清除按钮一直不显示
    // Always 清除按钮一直显示(前提是输入框中有文字的时候)
    // UnlessEditing   在非编辑状态的时候显示 (编辑状态的时候,输入框中有光标)
    // WhileEditing    在编辑状态的时候显示
    textField.clearButtonMode = .WhileEditing
    
    // 4.设置左视图
    // 使用图片作为左视图
    let leftImageView = UIImageView.init(image: UIImage.init(named: "player_down_1"))
    // 左视图中frame中坐标设置无效,只有大小的设置有效
    leftImageView.frame = CGRectMake(0, 0, 35, 35)
    textField.leftView = leftImageView
    
    // 使用文字作为左视图
    let leftLabel = UILabel.init(frame: CGRectMake(0, 0, 50, 40))
    leftLabel.text = "登陆"
    leftLabel.textAlignment = .Center
   // textField.leftView = leftLabel
    
    
    // 如果想要左视图显示出来,必须设置左视图的显示模式
    textField.leftViewMode = .Always
    
    
    // c.键盘相关
    // 1.设置键盘上的回车按钮的类型
    textField.returnKeyType = .Next
    
    
    // 2.设置键盘类型
    // 不同的输入框设置不同的键盘的样式
    textField.keyboardType = .NumbersAndPunctuation
    
    
    // 3.设置输入键盘界面(自定义键盘,不使用系统的键盘)
    // 自定义的输入界面 x,y坐标跟宽度是无效的,只有设置高度有效 (宽度是跟界面的宽度相等)
    let inputView = UIView.init(frame: CGRectMake(0, 0, 0, 256))
    inputView.backgroundColor = UIColor.greenColor()
    textField.inputView = inputView
    
    
    // 4.设置二级键盘
    //二级界面的输入界面 x,y坐标跟宽度是无效的,只有设置高度有效 (宽度是跟界面的宽度相等)
    let accessoryView = UIView.init(frame: CGRectMake(0, 0, 0, 50))
    accessoryView.backgroundColor = UIColor.purpleColor()
    textField.inputAccessoryView = accessoryView
    

}

}

UITextFeld代理

class ViewController: UIViewController {

// MARK: - 生命周期
override func viewDidLoad() {
    super.viewDidLoad()
    
    self.creatTextField()
}

// MARK: - textField
func creatTextField() {
    
    // 1.创建textField对象
    let textField = UITextField.init(frame: CGRectMake(100, 100, 250, 60))
    // 2.显示在界面上
    self.view.addSubview(textField)
    // 3.设置背景颜色
    textField.backgroundColor = UIColor.yellowColor()
    // 4.设置代理
    // textField委托   delegate代理
    textField.delegate = self   //self指的是当前类
    textField.text = "134"
    
    // 显示清除按钮
    textField.clearButtonMode = .Always
    
    // 再创建一个textField
    // 1.创建textField对象
    let textField1 = UITextField.init(frame: CGRectMake(100, 200, 250, 60))
    // 2.显示在界面上
    self.view.addSubview(textField1)
    // 3.设置背景颜色
    textField1.backgroundColor = UIColor.yellowColor()
    // 4.设置代理
    //textField1.delegate = self
    textField1.text = "222"
    
    
}


}



// 让ViewController遵守UITextFieldDelegate,实现协议内容
extension ViewController: UITextFieldDelegate {

// 当按键盘的回车键的时候调用这个方法
// 返回值:按回车键是否可以将联想的内容显示在输入框中,一般返回true
func textFieldShouldReturn(textField: UITextField) -> Bool {
    
    print("回车")
    
    // 收起键盘
    textField.resignFirstResponder()
    
    return true
}





// 在键盘上每次点击一个键,都会调用这个方法
// 参数1:委托
// 参数2:当前点击的按键对应的值在输入框中的字符中所在的范围
// 参数3:当前在键盘上点击的按键对应的值
// 返回值:是否将从键盘上输入的内容显示到textField上
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    
    
    print(range)
    print(string)
    
    
    // 如果是数字就不能显示到textField上
    let int = Int(string)
    
    if int != nil {
        
        return false
    }
        return true
}




// textField已经编辑结束会调用这个方法
func textFieldDidEndEditing(textField: UITextField) {
    
    print("编辑结束")
}



// 在textField将要结束编辑的时候调用.并且可以设置是否可以结束编辑
func textFieldShouldEndEditing(textField: UITextField) -> Bool {
    
    // 如果textField中字符个数大于7就可以结束编辑,否则不能结束编辑
    
//        if textField.text!.characters.count > 7 {
//            
//            return true
//        }

    
        return true
    
 
    

}



// 开始编辑的时候调用这个方法
func textFieldDidBeginEditing(textField: UITextField) {
    
    print("开始编辑")
}




// 开始编辑的时候调用这个方法,并且可以设置是否让当前的textField是否可以编辑
// 参数:委托
// 返回值:是否可以开始编辑,true->可以编辑,false->不可以编辑
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    
    print(textField.text)
    
    return true
}


// 返回值:点击清空按钮是否可以将textField中的内容清空。true -> 清空, false -> 不可以清空
func textFieldShouldClear(textField: UITextField) -> Bool {
    
    return true
}


}

切圆角

 // 切圆角(所有的视图都可以切圆角)
    // 每个视图都有一个layer,专门负责视图的显示。
    // 1.让layer可以裁剪
    textField.layer.masksToBounds = true
    // 2.设置圆角半径
    textField.layer.cornerRadius = 30
    // 加边框
    // 1.设置边框的宽度
    textField.layer.borderWidth = 2
    // 2.设置边框颜色   在最后 .CGColor可以将UIColor转换成CGColor
    textField.layer.borderColor = UIColor.lightGrayColor().CGColor

你可能感兴趣的:(UI阶段第一周笔记)