Swift學習筆記7-UIScrollView、UITableView使用

UIScrollView——基本使用

//創建滾動視圖
        let scrollView = UIScrollView()
        
        //設置尺寸
        scrollView.frame = CGRect(x: 0, y: 0, width: 375, height: 60);
        
        //設置背景色
        scrollView.backgroundColor = UIColor.redColor()
        
        //添加視圖
        self.view.addSubview(scrollView)
        
        //設置滾動條
        //是否顯示水平滾動條
        scrollView.showsHorizontalScrollIndicator = true
        //是否顯示豎直滾動條
        scrollView.showsVerticalScrollIndicator = false
        
        //設置分頁滾動
        scrollView.pagingEnabled = true
        
        //設置是否可以拉出空白區域
        scrollView.bounces = true
        
        //默認是false。如果是true并且bounces也是true,即使內容尺寸比scrollView的尺寸小,也能垂直推動
        scrollView.alwaysBounceVertical = false
        
        //默認是false。如果是true并且bounces也是true,即使內容尺寸比scrollView的尺寸小,也能水平推動
        scrollView.alwaysBounceHorizontal = false
        
        
        //允許滑動視圖本身,如果設為false就不能觸發拖動代理事件
        scrollView.scrollEnabled = false
        
        //在scrollView的內容周圍添加一個附件的區域
        scrollView.contentInset =  UIEdgeInsetsMake(100, 50, 50, 50)
        
        //調整指示器(滾動條)的位置
        scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(30, 30, 30, 30)
        
        //設置指示器(滾動條)的樣式
        scrollView.indicatorStyle = UIScrollViewIndicatorStyle.Black//黑色
        
        //最小的縮放倍數,默認值為1.0
        scrollView.minimumZoomScale = 0.2
        
        //放大的縮放倍數,默認值為1.0
        scrollView.maximumZoomScale = 100
        
        //創建一個數組,存儲三張圖片
        let imagesArray = ["DOVE 2","DOVE 5","DOVE 10"]
        
        //循環創建ImageView
        for i in 0..<imagesArray.count {
            
            //創建imageView
            let imageView = UIImageView(frame: CGRectMake(CGFloat (i)*scrollView.frame.size.width, 0, scrollView.frame.size.width, scrollView.frame.size.height))
            //添加圖片
            imageView.image=UIImage(named: imagesArray[i])
            //打開用戶交互
            imageView.userInteractionEnabled = true
            //把imageView添加到滾動視圖上
            scrollView.addSubview(imageView)
        }
        
        //設置內容區域
        scrollView.contentSize = CGSizeMake(scrollView.frame.size.width*CGFloat(imagesArray.count),scrollView.frame.size.height)
        
        //設置代理
        scrollView.delegate = self
        
        //設置directionalLockEnabled
        /*
         
         如果這個性能被設置成false,scrollView會被允許在水平和垂直兩個方向滾動。如果設置性能是true并且用戶開始在一個方向拖動時(水平方向或垂直方向),滾動視圖就不能在另一個方向滾動。如果拖動的方向時斜對角線方向,拖動事件將會被鎖住并且用戶可以在任何方向拖動,直到拖動事件結束。這個屬性的默認值是false。
         */
        scrollView.directionalLockEnabled = true
        
        //設置偏移量,以固定的速度設置成新的偏移量
        scrollView.setContentOffset(CGPointMake(10, 20), animated: false)
        
        //滾動矩形區域到可見的區域,如果完全可見就不做任何操作
        scrollView.scrollRectToVisible(CGRectMake(0, 0, 100, 300), animated: false)
        
        //短時間顯示滾動條,當你
        scrollView.flashScrollIndicators()
        
        //當用戶觸摸到scrollView時(即使還沒有開始拖動ScrollView)就會返回一個true值
        scrollView.tracking
        
        //當用戶已經開始拖動時會返回一個true值,這可能會需要一點時間或者與拖動一段距離
        scrollView.dragging
        
        //當用戶不再拖動或者不再觸摸scrollView(但是scrollView仍在滑動)
         scrollView.decelerating
        
        //默認值為true
        scrollView.delaysContentTouches = true
        
        //默認值為true。如果為false,一旦我們開始追蹤并且觸摸移動,我們無法拖動
        scrollView.canCancelContentTouches = true
        
        //如果手勢已經被傳遞到了scollView的父View上,在視圖開始滾動之前毀掉用這個方法。如果這個方法返回的是false,scrollView不會滾動并且這個手勢會繼續向父View傳遞
//        scrollView.touchesShouldCancelInContentView(<#T##view: UIView##UIView#>)
        
        //設置縮放
//        scrollView.setZoomScale(<#T##scale: CGFloat##CGFloat#>, animated: <#T##Bool#>)
//        scrollView.zoomToRect(<#T##rect: CGRect##CGRect#>, animated: <#T##Bool#>)
        
        //默認為true。如果設置,當手勢起作用時用戶會經過最?。畲蟮膮^域,并且,在手勢結束時這個區域會自動設置為最?。畲笾?。
        scrollView.bouncesZoom = true
        
        // 當用戶向上的手勢時,會返回true
        scrollView.zooming
        
        NSLog("scrollView.zooming>>>>>%zd",scrollView.zooming)
        
        //當我們在最小和最大值中間的一個區域中,會返回true。
        scrollView.zoomBouncing
        
        //滾動到頂部,默認值為true
        scrollView.scrollsToTop = true
        
        //使用這些容器配置scrollView內置的手勢識別
        scrollView.panGestureRecognizer
        scrollView.pinchGestureRecognizer
        
        //創建UIPageControl
        let pageControl = UIPageControl(frame: CGRectMake(0, scrollView.frame.size.height-30,200, 30))
        
        //總的圖片頁數
        pageControl.numberOfPages = 6
        
        //當前頁
        pageControl.currentPage = 0
        
        //用戶點擊UIPageControl的響應函數
        pageControl.addTarget(self, action: #selector(pageTurn(_:)), forControlEvents: UIControlEvents.ValueChanged)
        
        //設置pageControl 的尺寸
        let size = pageControl.sizeForNumberOfPages(6)

//點點的點擊事件
    func pageTurn(pageControl:UIPageControl) {
        
        
    }

    //UIscrollView的協議代理方法
    //滑動過程中
    func scrollViewDidScroll(scrollView: UIScrollView) {
        
    }
    //開始拖動
    func scrollViewWillBeginDragging(scrollView: UIScrollView) {
        
        
    }
    //開始拖動(以某種速率和偏移量)
    func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
        
    }
    
    //停止拖動
    func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        
    }
    //開始滑動
    func scrollViewWillBeginDecelerating(scrollView: UIScrollView) {
        
    }
    
    //允許縮放的視圖(一個scrollview中只能有一個可以縮放且必須設置可以縮放的范圍)
//    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
//        
//        //返回被縮放的試圖
//        //return imageView;
//    }
    
    //開始縮放的時候調用
    func scrollViewWillBeginZooming(scrollView: UIScrollView, withView view: UIView?) {
        
    }
    
    //正在縮放的時候調用
    func scrollViewDidZoom(scrollView: UIScrollView) {
        
    }
    
    //縮放完畢的時候調用
    func scrollViewDidEndZooming(scrollView: UIScrollView, withView view: UIView?, atScale scale: CGFloat) {
        
    }
    
    //將要滾動到頂部的時候調用
    func scrollViewShouldScrollToTop(scrollView: UIScrollView) -> Bool {
        
        return true
    }
    
    //滾動到頂部的時候調用
    func scrollViewDidScrollToTop(scrollView: UIScrollView) {
        
    }

UITableView——基本使用

import UIKit

class TableViewController: UIViewController {

    //MARK: -懶加載
    lazy var tableView: UITableView = {
        
        let tableView = UITableView(frame:CGRect(x:0,y:0,width:UIScreen.main.bounds.size.width,height:UIScreen.main.bounds.size.height),style:UITableViewStyle.plain);
        tableView.dataSource = self;
        tableView.delegate = self;
        self.view.addSubview(tableView);
        return tableView;
    }()
    
    lazy var titleArray:[String] = {
        return ["數據0","數據1","數據2","數據3","數據4","數據5","數據6","數據7","數據8","數據9","數據10","數據11"]
    }()
    
    //MARK: -頁面加載
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //實例化導航條
        self.navigationItem.title = "TableViewController";
        self.view.backgroundColor = UIColor.red;
        self.tableView.backgroundColor = UIColor.yellow;
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

//相當于OC里面分類的使用、使代碼結構清晰
extension TableViewController:UITableViewDelegate,UITableViewDataSource{
    // MARK: - UITableViewDelegate
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1;
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return titleArray.count;
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        //第一種創建cell的方式
        let initIdentifer = "Cell";
        var cell = tableView.dequeueReusableCell(withIdentifier: initIdentifer);
        
        if(cell == nil){
            cell = UITableViewCell.init(style: UITableViewCellStyle.subtitle, reuseIdentifier: initIdentifer );
        }
        cell?.textLabel?.text = titleArray[indexPath.row];
        cell?.detailTextLabel?.text = "titleArray\(indexPath.row)";
        cell?.accessoryType = UITableViewCellAccessoryType.disclosureIndicator;
        return cell!;
    }
    
    
    // MARK: - UITableViewDataSource
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 50;
    }
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 20;
    }
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 30;
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {  
      //進行cell點擊事件的處理
    }
}

自定義cell

第一種方法:

 let initIdentifer = "Cell";
 var cell = tableView.dequeueReusableCell(withIdentifier: initIdentifer);
 if(cell == nil){
       cell = UITableViewCell.init(style: UITableViewCellStyle.subtitle, reuseIdentifier: initIdentifer );
  }
 cell?.textLabel?.text = titleArray[indexPath.row];
 cell?.detailTextLabel?.text = "titleArray\(indexPath.row)";
 cell?.accessoryType = UITableViewCellAccessoryType.disclosureIndicator;
 return cell!;       

第二種方法:(通過注冊方式)

 self.tableView.register(TableViewCell.self, forCellReuseIdentifier: "TableViewCell");
//類注冊創建cell的方式
 let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath)
 cell.accessoryType = UITableViewCellAccessoryType.disclosureIndicator;
 return cell;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,245評論 4 61
  • 概述在iOS開發中UITableView可以說是使用最廣泛的控件,我們平時使用的軟件中到處都可以看到它的影子,類似...
    liudhkk閱讀 9,090評論 3 38
  • 昨日從昆明到大理六個小時的車上看完了這本書。 吳非是我非常敬畏的前輩。 敬的是他的那種兢兢業業的工作態度。他把教育...
    冰藍色的太陽閱讀 748評論 0 0
  • 我們都知道做事情要有始有終,就是有開始就要有結果,那么以始為終是什么意思呢?就是你心中要有一個目標,然后按著這個目...
    Fine婧婧閱讀 417評論 2 1
  • 踏上列車,一路馳騁,直指心之所向。疾馳而行的列車帶著回鄉的人兒,沖破黑暗無邊的夜幕,迎來黎明的第一縷曙光,映入眼簾...
    憨憨憨霓兒閱讀 374評論 0 0