Swift UI控件詳細介紹(上)

UI控件

首先介紹一下AppDelegate.swift
@UIApplicationMain 調用了OC中的UIApplicationMain函數;
UIApplicationMain是iOS應用程序的入口
UIApplicationMain:
a.創建了一個UIApplication對象,代表當前應用程序. 作用是用來檢測當前應用程序狀態的改變。

  •     1.在這個方法中來搭建應用程序中的所有的界面
    
  •             2.獲取應用程序需要展示的數據
    
  •                     3.使用界面展示數據
    

** 注意:**如果不在這個方法中去創建window,那么程序會通過Main.storyboard去創建應用程序的界面

b.創建一個遵守UIApplicationDelegate的協議的類的對象作為UIApplication的代理,作用是處理應用程序狀態的改變(創建AppDelegate對象并且設置為UIApplication對象的代理)

這個里面一個有六個方法分別是
1.當應用程序已經啟動成功后,會自動調用這個方法 application
2.當應用程序將要成為非活躍狀態的時候會自動調用這個方法。applicationWillResignActive

活躍狀態:程序在屏幕上可見
非活躍狀態:程序沒有顯示在屏幕上(按home鍵進入后臺、來電打斷、在當前應用程序打開其他的應用程序

3.應用程序已經進入后臺的時候會自動調用( 進入后臺:按home鍵)applicationDidEnterBackground

按下home鍵:command + shift + h
在這個方法中一般去暫停視頻/音頻播放;游戲需要暫停游戲;保存數據

4.應用程序將要進入前臺的時候會自動調用( 進入前臺)applicationWillEnterForeground

按兩下home鍵:command + shift + h + h(模擬器)

5.應用程序已經變成活躍狀態的時候會自動調用 applicationDidBecomeActive

a.程序啟動成功后
b.程序從后臺重新進入前臺
c.來電打斷結束

6.應用程序將要終止的時候會調用applicationWillTerminate

UIview

UIview:是ios中所有視圖(控件)直接/間接的父類;所以uiview的屬性和方法,對于其他類型的視圖都有效
視圖:在屏幕上能看見的所有東西屬于視圖

1.創建UIView的對象

        let redView = UIView.init()

2.設置frame屬性(由坐標(x,y)和大小(width,height)兩部分組成

        redView.frame = CGRectMake(10, 10, 100, 100)
   a必須設置坐標和大小(默認坐標(0.0),大小(0,0))
           b將視圖添加到已經展示在屏幕上的視圖上
  ios中所以的結構都有一個對應的Make方法用來快速的創建一個結構體變量

3.把視圖添加到界面上

        self.view.addSubview(redView)

4.設置背景顏色

視圖的背景顏色默認是透明
CGFloat就是UI中的浮點型
顏色創建方式:a通過類型方法創建指定顏色

        redView.backgroundColor = UIColor.greenColor()

b通過三原色創建顏色(red,green,blue:紅綠藍的值(0-1) alpna:透明的值(0-1)

  redView.backgroundColor = UIColor.init(red: 30/255.0, green: 133/255.0, blue: 26/255.0, alpha: 1)

總結:計算視圖坐標的時候,注意相對性,當前視圖被添加到那個視圖上那么當前視圖的坐標就是相對于誰來算的

相關屬性

        let readView = UIView.init()

        self.view.addSubview(readView)

設置背景顏色

        readView.backgroundColor = UIColor.redColor()

1.frame(坐標和大小)

        readView.frame = CGRectMake(100, 100, 100, 100)

2.center(中心點)
a通過frame和確定視圖的中心點坐標

        print(readView.center)

b可以通過center的值,取改變視圖的坐標

        readView.center = CGPointMake(200, 200)
        print(readView.frame)

3.bounds(坐標和大小)
默認情況下bounds的坐標是(0.0),大小和視圖的frame大小一樣

** 了解:**
rg改變bouns的大小,frame的大小和坐標都改變,center不變
如果改變bounds的坐標,不影響當前視圖的位置。但是影響添加當前視圖上的子視圖不建議修該bounds

形變

transform(變形):當前視圖發生形變,那么添加到當前視圖上所有的視圖會跟著一起形變
a縮放改變 參數1:x方向上的縮放比例,參數2y方向上的縮放比例

        readView.transform = CGAffineTransformMakeScale(0.5, 0.5)

b.旋轉(參數旋轉角度(圓周率對應的角度值)(0-360 或 0 到 2*M_PI))

        readView.transform = CGAffineTransformMakeRotation(CGFloat( M_PI_4))

c:多個變形同時發生 在另外一個形變的前提下旋轉 參數1:另外一個形變 參數2:旋轉角度

        readView.transform = CGAffineTransformRotate(CGAffineTransformMakeScale(0.5, 0.5), CGFloat(M_PI_4/2))

在另外一個形變的前提下平移

        readView.transform = CGAffineTransformTranslate(readView.transform, 0, 300)

在另一個形變的前提下縮放

        readView .transform = CGAffineTransformScale(CGAffineTransformMakeTranslation(100, 0), 0.5, 2)

組合兩個形變

        readView.transform = CGAffineTransformConcat(readView.transform, CGAffineTransformMakeTranslation(0.5, 300))

父子視圖

MARK:-父子視圖的特點和方法
創建黃色視圖

 let yellView=UIView.init(frame: CGRectMake(0, 0, 50, 50))
         yellView.backgroundColor=UIColor.yellowColor()

設置tag值,默認都是0,設置tag值的時候值必須大于0
tag的作用是區分界面不同的視圖

        redVIew.tag=10

1.一個視圖只有一個父視圖,可以有多個子視圖
連續將同一個視圖添加到兩個視圖。最會添加有效

        redVIew.addSubview(yellView)
         self.view.addSubview(yellView)
        yellView.tag=11

2獲取一個視圖的父視圖

        let auperView = redVIew.superview
        auperView?.backgroundColor = UIColor.greenColor()

3.獲取一個視圖的所以子視圖

         let sub = self.view.subviews

4.通過tga值拿到指定的值的子視圖

        let sub1 = self.view.viewWithTag(11)
        sub1?.frame.origin.y+=200

層次關系

在一個視圖上,添加多個子視圖的時候,子視圖之間如果有公共的部分,那么后添加的子視圖會覆蓋先添加的
一般情況下,如果想要將一個視圖顯示在最下面,就最后添加,要想顯示在最上面的就最后添加
創建視圖

       let view1 = self.creatView(CGRectMake(50, 100,100,100), backColor: UIColor.yellowColor())
        
       let view2 =  self.creatView(CGRectMake(100, 150,100,100), backColor: UIColor.redColor())
       let view3 =  self.creatView(CGRectMake(150, 200,100,100), backColor: UIColor.greenColor())
        let view4 =  self.creatView(CGRectMake(180, 150,100,100), backColor: UIColor.blueColor())

將指定的視圖放到最上層

        self.view.bringSubviewToFront(view1)

將指定視圖放到最下層

        self.view.sendSubviewToBack(view3)

將指定的視圖插入到另一個視圖上面

        self.view.insertSubview(view3, aboveSubview: view2)

將指定的視圖插入到另一個視圖的下面

        self.view.insertSubview(view2, belowSubview: view1)

動畫

動畫 UIView的動畫是用來改變動畫的視圖frame相關屬性,背景顏色透明度 形變等
下面介紹4種
創建視圖

        subView.frame = CGRectMake(0, 0, 100, 100)
        subView.center = self.view.center
        subView.backgroundColor = UIColor.blueColor()
        self.view.addSubview(subView)
        layearAction()
        UIViewAnimation1()

參數1:動畫時間 參數2:延遲時間 參數3:整個動畫完成之后自動調用這個方法

    func UIViewAnimation1(){

    UIView.animateWithDuration(2, animations: {
        self.subView.transform = CGAffineTransformMakeTranslation(0, -300)
        }) { (_) -> Void in
//         動畫結束需要執行的代碼
            UIView.animateWithDuration(3, animations: {
                self.subView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4))
                 self.subView.transform=CGAffineTransformMakeTranslation(0, 0)
            })
            
        }
    
    }
 參數1:動畫時間  參數2:延遲時間 參數3:選項 (.Repeat動畫重復執行,.Autoreverse自動回到動畫開始的狀態) 參數4:動畫結束時視圖狀態的閉包  參數5:整個動畫過程完成后需要執行的閉包
    func UIViewAnimation2(){
 
 
        UIView.animateWithDuration(1, delay: 0.5, options: [ .Repeat, .Autoreverse,.CurveEaseInOut], animations: {
//            self.subView.alpha = 0.6
            self.subView.transform = CGAffineTransformMakeTranslation(0, -300)
            self.subView.transform = CGAffineTransformMakeRotation(CGFloat(360))
            self.subView.backgroundColor = UIColor.greenColor()
            
            
            }, completion: nil)
        
        
        
    }

功能:執行這個方法前視圖狀態,動畫切換到閉包里面設置的最終狀態 參數1:動畫時間(單位秒) 參數2:設置動畫結束是的視圖狀態

    func UIViewAnimation3(){
        

        UIView.animateWithDuration(1) {
//        在這設置視圖動畫結束是狀態
            
            self.subView.frame.origin.y=50
            self.subView.frame.size = (CGSizeMake(50, 50))
            
            self.subView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4))
            
            self.subView.backgroundColor = UIColor.redColor()
//            設置透明度
            self.view.alpha = 0.3
        }
        
    }
參數1:動畫時間 參數2:延遲時間 參數3:彈簧板壓力系數 參數4:彈簧初始加速度 參數5:選項  參數6:設置動畫結束視圖狀態  參數7:動畫結束后執行的閉包
    func UIViewAnimation4(){
        UIView.animateWithDuration(2, delay: 1, usingSpringWithDamping: 0.1, initialSpringVelocity: 0, options: [ .Repeat, .Autoreverse], animations: { self.subView.alpha = 0.6
            self.subView.transform = CGAffineTransformMakeTranslation(0, -300)
            self.subView.transform = CGAffineTransformMakeRotation(CGFloat(720))
// 注意:對于有圓角的矩形,改變大小而又不影響形狀,只能通過形變取縮放,不能直接改變frame中的size
            
            self.subView.transform  = CGAffineTransformMakeScale(0, -300 )
                self.subView.backgroundColor = UIColor.randomColor()
            
            }, completion: nil)
    }

補充layer 屬性是負責視圖的形狀(顯示) 切圓角 當圓角值為正方形的一半,就可以切一個圓

func layearAction(){
self.subView.layer.cornerRadius = 20
//設置邊框
self.subView.layer.borderWidth = 3
self.subView.layer.borderColor = UIColor.randomColor().CGColor
    }

UIlable

UIlable:UiView -> UIView的屬性方法UIlabel 都擁有,從UIView繼承下來的屬性

//        創建UIlabel對象
        let label = UILabel.init(frame: CGRectMake(10, 10, 400, 600))
        
//        添加到界面
        self.view.addSubview(label)
//        設置顏色
        label.backgroundColor = UIColor.greenColor()

        
//        1.UILabel特有的屬性
//        設置label上顯示文字
        label.text = "《書湖陰先生壁》茅檐常掃凈無苔,花木成畦手自栽。一水護田將綠繞,兩山排闥送青來。"
//        拿到lable上的文字
        print(label.text)
//        2.設置字體(默認大小17)
//        使用系統字體 設置字體大小
        label.font = UIFont.systemFontOfSize(26)
//        參數1:字體大小 參數:2 字體粗細   使用系統字體
        label.font = UIFont.systemFontOfSize(36, weight: 6)
//        使用系統粗體 設置大小
       label.font = UIFont.boldSystemFontOfSize(36)
//       使用系統斜體 設置字體大小
       label.font = UIFont.italicSystemFontOfSize(66)
//        3.設置文本顏色(默認黑色)
        label.textColor = UIColor.redColor()
//        設置陰影顏色
        label.shadowColor = UIColor.blueColor()
//        sz陰影的偏移
        label.shadowOffset.height=6
        label.shadowOffset.width=6
        label.shadowOffset = CGSizeMake(0, 1)
//        設置文字的劇中模式(默認左對齊)
        label.textAlignment = .Center
        
//        設置行數
        label.numberOfLines = 15
        
//        自動換行
//        label.numberOfLines = 0
        
//        設置換行模式 ByWordWrapping以單詞為單位換行  ByCharWrapping 以字符為單位換行
        
        label.lineBreakMode = .ByCharWrapping
        
        

補充使用自己字體的步驟
1.將ttf文件拖到工程中
2.在info.plist文件中添加鍵值對 Fontsprovided by appli 將字體添加到系統字體庫
3.通過提供系統名的構造方法取創建字體(要先找到自己添加的字體的字體名

label.font = UIFont.init(name: "HYZhuanShuF", size: 26)

根據文字設置label大小

需要顯示在Lable上的文字

        let str = "ikdh"
//        計算顯示指定文字所需要的最小空間
//        1.將swift的字符串轉換成OC的字符串
        let ocstr = str as NSString
//        2.計算字符串的大小
//        參數1:限制顯示當前字符串的最大寬度和長度
//        參數2:渲染方式(UsesLineFragmentOrigin)
//        參數3:確定文字字體大小(NSFontAttributeName)字體對應的Key值  NSForegroundColorAttributeName顏色值
//        參數4:
         let strSize = ocstr.boundingRectWithSize(CGSizeMake(200, 200), options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName:UIFont.systemFontOfSize(17)], context: nil).size
        print(strSize)
        
//        創建lable顯示文字
        let lable = UILabel.init(frame: CGRectMake(100, 100, strSize.width, strSize.height))
        lable.backgroundColor = UIColor.blueColor()
        self.view.addSubview(lable)
        
        lable.text = str
        lable.numberOfLines = 0

UIImageView

 創建UIImageView對象
      let img = UIImageView(frame: CGRectMake(100, 100, 200, 300))
//        設置背景顏色
        img.backgroundColor = UIColor.yellowColor()
//        添加到界面
        self.view.addSubview(img)
//        UIImageView專有的屬性
//        image屬性
//        通過圖片名去創建一個圖片對象(注意:如果圖片的格式是png,那么圖片名的后綴可以省略,但是其他格式的圖片的圖片后綴名不能省略
        img.image = UIImage.init(named: "luffy")
//        通過圖片路徑去創建一個圖片對象
//        將文件(處了Swift文件)放到工程中實質是放到當前應用程序的包文件中
//        拿到工程中圖片路徑先要獲取包文件的路徑
//        拿到包中的指定的文件路徑
    let k = NSBundle.mainBundle().pathForResource("luffy", ofType: "png")
        img.image = UIImage(contentsOfFile: k!)
//        比較通過圖片名和通過圖片地址創建圖片對象 的兩種方法
//        1.1.通過圖片名創建的圖片對象在程序結束后才會被銷毀,只會創建一次,通過圖片地址創建的圖片對象是當前圖片對象不在使用的時候就銷毀
//        1.2.使用圖片名創建圖片的情況下:創建小圖標的時候,在工程中會重復使用的圖片
//        1.3.使用圖片地址創建圖片對象的情況:不會頻繁的在多個界面出現大圖
//        2.內容模式
        img.contentMode = .ScaleToFill
幀動畫
//調用下面創建的幀動畫的方法
      CrectImage()
//        創建一個定時器,并且自動開啟
//        參數1.定時間 參數2.調用對象的方法 參數3.存儲定時時間到了以后需要調用的方法(可以不帶參也可以帶參,帶參數只能帶一個參數,并且參數類型是NSTimer類型) 參數4.給當前的NSTimer的userInfo屬性賦值 參數5. 是否重復
//       功能每個0.1秒 self取調用一次timerAction方法
        NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "timerAction:", userInfo: nil, repeats: true)

    }
//    參數:當前定時器
    func timerAction(timer:NSTimer){
        
        self.imgView.frame.origin.x += 6
//        判斷小鳥是否飛到了屏幕邊緣
        if self.imgView.frame.origin.x >= self.view.bounds.width-self.imgView.bounds.width{
            self.imgView.frame.origin.y += 60
            self.imgView.frame.origin.x -= 60
//          停止定時器
//            timer.fireDate = NSDate.distantFuture()
//            繼續
//            timer.fireDate = NSDate.distantPast()
            
        }
        if self.imgView.frame.origin.y >= self.view.bounds.width-self.imgView.bounds.width{
            self.imgView.frame.origin.y -= 60
            self.imgView.frame.origin.x -= 60
            
        }
   
   }
    
    func CrectImage(){
        
        //        創建一UIImageView
        //        通過圖片創建一個Image:UIImageView的大小是圖片大小坐標是(0.0)
        imgView = UIImageView.init(image: UIImage.init(named: "DOVE 1.png"))
        //        在界面顯示
        self.view.addSubview(imgView)
        //        3.使用UIImageview播放幀動畫
        //        3.1設置幀動畫數組
        var imgAray = [UIImage]()
        for item in 1...18{
            let imgname = "DOVE \(item).png"
            
            let img = UIImage.init(named: imgname)
            imgAray.append(img!)
        }
        
        imgView.animationImages = imgAray
        //        3.2設置動畫時間,單位秒
        imgView.animationDuration = 0.5
        //        設置動畫重復次數(默認是0,無線循環)
        imgView.animationRepeatCount = 0
        //        3.4開始動畫
        imgView.startAnimating()
    }

UIButton(按鈕)

文字按鈕

//        1.創建UIButton對象
        let botton = UIButton.init(frame: CGRectMake(100, 100, 200, 200))
//        2.設置背景顏色
        botton.backgroundColor = UIColor.redColor()
//        3.添加到視圖
        self.view.addSubview(botton)
        
//        4.設置按鈕上顯示的文字
//        參數1 想要在按鈕上顯示的文字  參數2 :狀態
//        Normal-》正常狀態顯示沒有被點擊   Highlighted-》高量狀態按下去還沒有彈起來的時候狀態  ->Selected選中狀態  -》.Disabled不可用狀態
         botton.setTitle("世界你好布!", forState: .Normal)
        botton.setTitle("我很好!", forState: .Highlighted)
//        設置當前按鈕是否選中(默認是false)
        botton.selected = false
        botton.setTitle("世界你好1!", forState: .Selected)
//        設置不可用(默認是true)
        botton.enabled = true
        botton.setTitle("不可用", forState: .Disabled)
//        設置文字顏色(可以給不同的狀態設置不同的顏色)
        botton.setTitleColor(UIColor.yellowColor(), forState: .Highlighted)
//        注意按鈕上的文字和顏色,必須通過對應的set方法取根據狀態設置,其他相關的屬性可以通過拿到titlelabel取設置
//        設置按鈕文字字體
        botton.titleLabel?.font = UIFont.systemFontOfSize(38)

//        設置對齊方式
        botton.titleLabel?.textAlignment = .Center
//        給按鈕添加時間 參數1:調用方法的對象  參數2 :指定時間發生后參數1要去調用的方法(可以不帶參數,帶只能帶一個 并且必須是UIButton) 參數3:設置事件
//        TouchDown->按下時間  ->按下彈起事件
//        功能當按鈕被按下的時候self就會取調用buttonAction方法
        botton.addTarget(self, action: "buttonAction:", forControlEvents: .TouchDown)

圖片按鈕


    let imageButton = UIButton.init(frame: CGRectMake(100, 300, 200, 200))
//        設置背景圖片  參數1 :圖片  參數2 :狀態
    imageButton.setImage(UIImage.init(named: "luffy4"), forState: .Normal)
       
        
        imageButton.layer.borderColor = UIColor.init(red: CGFloat(arc4random()%256)/255, green: CGFloat(arc4random()%256)/255, blue: CGFloat(arc4random()%256)/255, alpha: 1).CGColor
        
//        添加點擊時間
        
         imageButton.addTarget(self, action: "buttonAction1:", forControlEvents: .TouchDown)

圖片文字按鈕


        let itbutton = UIButton.init(frame: CGRectMake(100, 500, 200, 200))
        self.view.addSubview(itbutton)
        itbutton.setTitle("你好", forState: .Normal)
        
//        itbutton.setImage(UIImage.init(named: "luffy"), forState: .Normal)
        
        itbutton.setTitleColor(UIColor.greenColor(), forState: .Normal)
//        添加事件
        itbutton.addTarget(self, action: "buttonAction1:", forControlEvents: .TouchDown)
        itbutton.setBackgroundImage(UIImage.init(named: "luffy"), forState: .Normal)
        itbutton.titleLabel?.font = UIFont.boldSystemFontOfSize(36)
        
        
    }

UITextField(文本框)

 //UITextField:UIControl:UIView
        //===========UIView的屬性和方法=======
        //1.創建UITextField對象
        let textField = UITextField.init(frame: CGRectMake(100, 100, 200, 50))
        //2.添加到界面上
        self.view.addSubview(textField)
        //3.設置背景顏色  
        textField.backgroundColor = UIColor.yellowColor()
        
        
        //4.再創建一個UITextField對象
        let textField2 = UITextField.init(frame: CGRectMake(100, 200, 200, 50))
        self.view.addSubview(textField2)
        textField2.backgroundColor = UIColor.yellowColor()
        textField2.delegate = self
        
        //=====textField的專有屬性和方法====
        //(1)文字相關
        //1.text屬性
        //設置文本輸入框的內容
        textField.text = "你好世界"
        //拿到文本輸入框的內容
        print(textField.text)
        
        //2.文字顏色
        textField.textColor = UIColor.brownColor()
        
        //3.設置文字字體
        textField.font = UIFont.systemFontOfSize(14)
        
        //4.設置占位文字(在輸入框的內容為空的時候就會顯示出來)
        textField.placeholder = "請輸入賬號"
        
        //5.設置文本的對齊方式(默認是:左對齊)
        textField.textAlignment = .Left
        
        //6.密文顯示(默認是false)
        textField.secureTextEntry = true
        
        
        //(2)顯示相關
        //1.設置文本框的樣式
        textField.borderStyle = .RoundedRect
        
        //2.設置清除按鈕模式(清除按鈕實質是rightView)
        //(前提是輸入框中有文字)
        //Always -> 一直顯示
        //Never -> 從不顯示(默認)
        //WhileEditing -> 當文本輸入框處于編輯狀態的時候才顯示
        //UnlessEditing ->當文本輸入框處于非編輯狀態的時候才顯示
        //注:當文本輸入框中有光標的時候就是處于編輯狀態
        textField.clearButtonMode = .Always
        
        //3.左視圖
        let leftImageView = UIImageView.init(frame: CGRectMake(0,0, 40,40))
        leftImageView.image = UIImage.init(named: "luffy1")
        //設置左視圖
        textField.leftView = leftImageView
        //設置左視圖的顯示模式(確定什么時候顯示,默認是從不顯示)
        textField.leftViewMode = .Always
        
        //4.右視圖
        //當右視圖顯示的時候,清除按鈕不能顯示
        /*
        let rightLabel = UILabel.init(frame: CGRectMake(0, 0, 40, 40))
        rightLabel.text = "你好"
        textField.rightView = rightLabel
        textField.rightViewMode = .Always
        */
        
        //(3)鍵盤相關
        //1.設置鍵盤上返回按鈕的樣式
        textField.returnKeyType = .Search
        
        //2.鍵盤樣式
        textField.keyboardType = .Default
        
        //3.設置自定義的鍵盤
        //自定義的鍵盤,只有高度有效。寬度是屏幕的寬度
        let myInputView = UIView.init(frame: CGRectMake(0, 0, 0, 256))
        
        myInputView.backgroundColor = UIColor.redColor()
        //textField.inputView = myInputView
        
        //4.設置子鍵盤
        let accessoryView = UIView.init(frame: CGRectMake(0, 0, 0, 50))
        accessoryView.backgroundColor = UIColor.greenColor()
        textField.inputAccessoryView = accessoryView
        
        //(4)設置代理
        //textField ->委托
        //self -> 代理
        textField.delegate = self
        

拓展

extension ViewController: UITextFieldDelegate{

    //1.當按鍵盤上的返回按鈕的時候,會自動調用
    func textFieldShouldReturn(textField: UITextField) -> Bool{
        
        print("返回按鈕被點擊")
        
        
        //收起鍵盤(結束編輯)
        //1.放棄第一響應者
        textField.resignFirstResponder()
        //2.直接讓指定的textField結束編輯
        textField.endEditing(true)
        //3.讓self.view上的所有的子視圖都結束編輯
        self.view.endEditing(true)
        
        
    
        return true
    }
    
    //2.當點擊textField彈出來的鍵盤上的按鍵的時候會自動調用這個方法
    //參數1:委托
    //參數2:當前輸入的字符所在的位置
    //參數3:當前輸入的字符串(在鍵盤上按的鍵的值)
    //返回值:是否可改變textField的text屬性();false -> 按鍵盤上的按鍵無效
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool{
        
        print(range)
        print(string)
        if string == "0" {
            
            print("進入秘密頁")
        }
        
        return true
    }
    
    
    //3.當文本輸入框已經結束編輯的時候會自動調用這個方法
    func textFieldDidEndEditing(textField: UITextField){
    
        print("已經結束編輯")
    }
    
    
    //4.當文本輸入框已經開始編輯的時候會自動調用這個方法
    func textFieldDidBeginEditing(textField: UITextField){
    
        print(textField.text)
        print("已經開始編輯")
    }
    
    
    //5.當文本輸入框將要結束編輯的時候會自動調用這個方法
    //返回:設置當前的textField是否可以結束編輯(默認是true)
    func textFieldShouldEndEditing(textField: UITextField) -> Bool{
        print("將要結束編輯")

        //要求文本輸入框中的文字長度要大于等于8的時候才能結束編輯
        if textField.text?.characters.count >= 8 {
            
            return true
        }
        
        return false
        
    }
    
    
    //6.在textField將要開始編輯的時候會自動調用
    //參數:當前這個協議對應的委托
    //返回值:設置當前的textField是否可以進行編輯(默認是true)
    func textFieldShouldBeginEditing(textField: UITextField) -> Bool{
        
        print("將要開始編輯")
        
        return true  //false ->讓textField不能進行編輯
    }
    
    
}


.UISwitch(開關)

    func creatSwitch() {
        
        //1.創建開關對象
        //UISwitch:UIControl:UIView
        let sw = UISwitch.init(frame: CGRectMake(100, 100, 100, 50))
        //2.添加到界面上
        self.view.addSubview(sw)
        
        //3.核心屬性:開關狀態(默認是:關)
        //設置開關的狀態
        sw.on = true  //false -> 關
        sw.setOn(false, animated: true)
        //拿到當前的狀態
        print(sw.on)
        
        //4.核心方法:
        //參數1:調用方法的對象
        //參數2:指定的事件發生后參數1要去調用的方法對應的selector
        //參數3:事件
        //功能:當開關的值(開關的狀態)發生改變的時候,self會去調用switchAction方法
        sw.addTarget(self, action: "switchAction:", forControlEvents: .ValueChanged)
        
        //5.設置開關開的狀態的顏色(默認是綠色)
        sw.onTintColor = UIColor.redColor()
        //6.開關關閉的時候的邊框顏色
        sw.tintColor = UIColor.purpleColor()
        //7.設置開關上的滑塊的顏色
        sw.thumbTintColor = UIColor.yellowColor()
        
        
        

UISlider(滑條)


        //1.創建滑條對象
        //UISlider:UIControl:UIView
        let slider = UISlider.init(frame: CGRectMake(100, 160, 200, 20))
        //2.添加到界面上
        self.view.addSubview(slider)
        
        //3.核心屬性:值
        //value:滑塊的位置對應的值(默認是0~1)
        slider.value = 0.5
        //最小值和最大值
        slider.minimumValue = 0
        slider.maximumValue = 100
        
        //4.核心方法
        slider.addTarget(self, action: "sliderAction:", forControlEvents: .ValueChanged)
        
        //5.是否連續改變
        slider.continuous = false
//文字圖片給之前的用法是一樣的就不一一介紹了



UIStepper(步進器)

        //1.創建步進器對象
        let stepper = UIStepper.init(frame: CGRectMake(100, 200, 100, 50))
        //2.添加到界面上
        self.view.addSubview(stepper)
        
        //3.核心屬性:值
        //當前值
        stepper.value = 1
        print(stepper.value)
        //最小值和最大值
        stepper.minimumValue = 0
        stepper.maximumValue = 10
        //步進(每按一下加或者減,增加/減少的值)
        stepper.stepValue = 1  //步進值必須大于0
        
        //4.核心方法
        stepper.addTarget(self, action: "stepperAction:", forControlEvents: .ValueChanged)
        
        //5.設置值是否連續改變(按住不放的時候)
        stepper.continuous = false
        
        //6.設置是否重復 false->按住不放的時候不計數;true->按住不放的時候計數(默認)
        stepper.autorepeat = false
        
        
        //7.設置填充顏色
        stepper.tintColor = UIColor.redColor()
        

UIProgressView(進度條)

    func creatProgress() {
        
        //1.創建進度條對象
        //UIProgressView : UIView
        let progress = UIProgressView.init(frame: CGRectMake(100, 300, 200, 20))
        progress.tag = 100
        //2.添加到界面上
        self.view.addSubview(progress)
        
        //3.核心屬性
        //進度:0~1
        //設置當前進度
        progress.progress = 0.5
        progress.setProgress(0.6, animated: true)
        //4.顏色相關
        //5.圖片相關

UIActivityIndicatorView(活動指示器)

    func creatActivity() {
        
        //1.創建活動指示器對象
        //UIActivityIndicatorView : UIView
        let activity = UIActivityIndicatorView.init(frame: CGRectMake(100, 360, 50, 50))
        //2.添加到界面上
        self.view.addSubview(activity)
        //3.想要讓活動指示器顯示,必須讓它開始動畫
        activity.startAnimating()
        //4.停止動畫->活動指示器就會消失
        //activity.stopAnimating()
        
        //5.設置活動指示器的樣式
        activity.activityIndicatorViewStyle = .WhiteLarge
        

UISegmentedControl(多段選擇器)

    func creatSegement() {
        
        //1.創建多段選擇器對象
        //UISegmentedControl : UIControl
        //參數1:分段選擇器上的內容對應的數組
        let segemnet = UISegmentedControl.init(items: ["海賊王","火影忍者","死神"])
        segemnet.frame = CGRectMake(100, 400, 200, 50)
        //2.顯示在界面上
        self.view.addSubview(segemnet)
        //3.核心屬性
        //a.每個分段上的內容 ->通過創建分段選擇器的時候去設置
        //b.當前選中的分段的下標(從0開始)
        segemnet.selectedSegmentIndex = 0
        
        //4.核心方法
        segemnet.addTarget(self, action: "segementAction:", forControlEvents: .ValueChanged)
        
        //5.拿到分段選擇的分段數
        print(segemnet.numberOfSegments)
        
        //6.設置填充顏色
        segemnet.tintColor = UIColor.whiteColor()
    }
    

以上事件響應

extension ViewController{
    
    //4.分段選擇器事件
    func segementAction(segement:UISegmentedControl) {
        
        print(segement.selectedSegmentIndex)
        //拿到當前被選中的分段的title
        print(segement.titleForSegmentAtIndex(segement.selectedSegmentIndex))
    }
    
    //3.步進器
    func stepperAction(stepper:UIStepper) {
        
        print(stepper.value)
    }
    
    //2.滑條
    func sliderAction(slider:UISlider) {
        
        print(slider.value)
        //拿到進度條
        let progress = self.view.viewWithTag(100) as! UIProgressView
        let t = slider.value/(slider.maximumValue - slider.minimumValue)
        progress.setProgress(t, animated: true)
        
    }

    //1.開關事件
    func switchAction(sw:UISwitch) {
        
        if sw.on {
            
            print("開關打開")
        }else{
        
            print("開關關閉")
        }
    }
}

警告框


       //1.創建一個表單視圖
        //UIAlertController : UIViewController
        //參數1:標題
        //參數2:信息
        //參數3:風格(ActionSheet->表單,Alert->警告框)
        let alterController = UIAlertController.init(title: nil, message: "消息", preferredStyle: .Alert)

        //2.添加到界面上
        //參數1:需要顯示的視圖控制
        self.presentViewController(alterController, animated: true, completion: nil)
        
        //3.添加選項按鈕
        //參數1:選項對應的按鈕上的文字
        //參數2:風格
        //參數3:當當前選項對應的按鈕被點擊后會執行的代碼對應的閉包
        let action = UIAlertAction.init(title: "相機", style: .Default) { (_) in
            
            print("相機被點擊")
        }
        
        //Destructive風格
        let action2 = UIAlertAction.init(title: "相冊", style: .Destructive) { (_) in
            
            print("相冊被點擊")
        }
        
        //Cancel風格
        let action3 = UIAlertAction.init(title: "取消", style: .Cancel) { (_) in
            
            print("取消")
        }
        
        //添加相機對應的action
        alterController.addAction(action)
        //添加相冊對應的action
        alterController.addAction(action2)
//        alterController.addAction(action3)
        
        

UITextView (顯示區文本)


    
        //1.創建textView對象
        //UITextView:UIScrollView : UIView
        textView = UITextView.init(frame: CGRectMake(100, 100, 200, 70))
        //2.添加到界面上
        self.view.addSubview(textView)
        //3.設置背景顏色
        textView.backgroundColor = UIColor.yellowColor()
        //4.text屬性
        textView.text = " default is nil. Can be useful with the appearance proxy on custom UIView subclasses."
        //5.設置是否可以選中和編輯
        //默認是true -> 可以選中和編輯
        textView.selectable = true
        
        //6.是否可以選中刪除所有
        textView.clearsOnInsertion = true
    
        //7.其他的屬性和方法參考UITextField
        
    
    //在點擊當前頁面的時候會自動調用這個方法
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        
        //5.獲取選中的范圍
        let range = textView.selectedRange
        print(range)
    }
    
    
    
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,936評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,744評論 3 421
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,879評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,181評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,935評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,325評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,384評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,534評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,084評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,892評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,623評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,322評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,735評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,990評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,800評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,084評論 2 375

推薦閱讀更多精彩內容

  • 在iOS中隨處都可以看到絢麗的動畫效果,實現這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,544評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,132評論 5 13
  • Core Animation基礎 Core Animation 利用了硬件加速和架構上的優化來實現快速渲染和實時動...
    獨木舟的木閱讀 1,551評論 0 3
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,155評論 4 61
  • 中華傳統武術當中套路是重要的組成部分,無論是徒手的拳術還是器械都有或長或短及各種形式出現的套路。 但套路練的多或是...
    梁山的洛奇閱讀 759評論 0 4