swift中的UITableView學習總結 - Swift

 

UITableView - Swift數組

在這裏就不過多的去介紹object-c中的UITableView與Swift的區別了,直接總結在Swift中的用法,我也是在學習有不足的地方能夠共同探討。app

Swift中使用TableView和object-c中的流程同樣,一樣須要註冊cell、實現相關的代理方法、cell的重用機制。ide

import UIKit

let cell_identifier: String = "Cell"
/*
var infoTableView = UITableView()
var itemArr = NSMutableArray()
*/
class SecondViewController: UIViewController,
UITableViewDelegate,
UITableViewDataSource {
    
    var infoTableView:UITableView? = nil    //聲明tableView變量
    var itemArr:NSMutableArray = []         //聲明可變數組變量
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Do any additional setup after loading the view.
        view.backgroundColor = UIColor.white
        self.createSubViews()
    }
    func createSubViews() {
        
        self.itemArr = NSMutableArray.init(array: ["鄭州","開封","洛陽","焦做","新鄉","周口","濟源","漯河","信陽","安陽","許昌"])
        //UITableView 初始化
        self.infoTableView = UITableView (frame: view.bounds,style: UITableViewStyle.plain)
        self.infoTableView?.tableFooterView = UIView()
        self.infoTableView?.dataSource = self
        self.infoTableView?.delegate = self
        self.infoTableView?.setEditing(true, animated: true)
        self.view.addSubview(self.infoTableView!)
        
        //註冊 cell
        self.infoTableView?.register(UITableViewCell.self, forCellReuseIdentifier: cell_identifier)
        //這種註冊cell的方法也能夠
        //infoTableView.register(UITableViewCell.classForCoder(), forCellReuseIdentifier: cell_identifier)
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return itemArr.count
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        
        return 60.0
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: cell_identifier, for: indexPath)
        cell.textLabel?.text = (itemArr[indexPath.row] as! String)
        return cell
    }
    
    //分割線從左端頂部顯示(使cell的)分割線與屏幕的左右兩端對齊顯示
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        
        if(cell.responds(to: #selector(setter: UITableViewCell.separatorInset))){
            cell.separatorInset = .zero
        }
        if(cell.responds(to: #selector(setter: UITableViewCell.layoutMargins))){
            
            cell.layoutMargins = .zero
        }
    }
     public func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath){
       //單獨刪除單元格
        if editingStyle ==  UITableViewCellEditingStyle.delete{
            self.itemArr.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath], with:.top)
            print("單獨刪除cell單元格響應!")
            let alertCon = UIAlertController.init(title: "提示", message: "您正在進行UItableViewCell的刪除操做,是否刪除?", preferredStyle:UIAlertControllerStyle.actionSheet)
            let doneAction = UIAlertAction.init(title: "刪除", style: UIAlertActionStyle.destructive, handler: { (UIAlertAction) -> Void in
                
                print("alertView肯定響應!")
            })
            
            let cancleAction = UIAlertAction.init(title: "放棄", style: UIAlertActionStyle.default, handler: { (UIAlertAction) -> Void in
                
                print("alertView取消響應!")
                
            })
            
            alertCon.addAction(doneAction)
            alertCon.addAction(cancleAction)
            self.present(alertCon, animated: true, completion: nil)
            //插入一個單元格數據
        }else if editingStyle == UITableViewCellEditingStyle.insert{
            
            print("insert響應!")
            
            let alertCon = UIAlertController.init(title: "提示", message: "您正在進行UItableViewCell的插入操做?", preferredStyle:UIAlertControllerStyle.alert)
            let doneAction = UIAlertAction.init(title: "肯定", style: UIAlertActionStyle.default, handler: { (UIAlertAction) -> Void in

                print("alertView肯定響應!")
                self.itemArr .insert("鄭州(新增)", at: indexPath.row)
                self.infoTableView?.reloadData()
                
            })
            
            let cancleAction = UIAlertAction.init(title: "取消", style: UIAlertActionStyle.default, handler: { (UIAlertAction) -> Void in
                
                print("alertView取消響應!")
                
            })
            alertCon.addAction(doneAction)
            alertCon.addAction(cancleAction)
            self.present(alertCon, animated: true, completion: nil)
        }
     }
    
     public func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle{
        print("單元格cell刪除設置響應")
        //返回的cell的樣式 是帶有選擇按鈕的樣式
        //return UITableViewCellEditingStyle(rawValue: UITableViewCellEditingStyle.RawValue(UInt8(UITableViewCellEditingStyle.insert.rawValue)|UInt8(UITableViewCellEditingStyle.delete.rawValue)))!
        
        return UITableViewCellEditingStyle.delete
     }
    
    
    //自定義左滑顯示項目 (實現此代理方法時須要設置TableView的setEditing爲NO 不然沒有實際的效果, 也能夠設置代理editingStyleForRowAt返回UITableViewCellEditingStyle.delete 此時點擊cell左側的按鈕cell會自動向左側滑呼出自定義的操做按鈕)
    /*func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
        
        //刪除操做
        let deleteAction = UITableViewRowAction.init(style: .default, title: "刪除", handler: {_,_ in
            
        })
        deleteAction.backgroundColor = UIColor.red
        
        let editAction = UITableViewRowAction.init(style: UITableViewRowActionStyle.normal, title: "編輯", handler: {_,_ in
            
        })
        let insertAction = UITableViewRowAction.init(style: UITableViewRowActionStyle.normal, title: "插入", handler: {_,_ in
            
        })
        insertAction.backgroundColor = UIColor.blue
        
        let topAction = UITableViewRowAction.init(style: UITableViewRowActionStyle.normal, title: "置頂", handler: {_,_ in
            
        })
        editAction.backgroundColor = UIColor.green
        
        return [deleteAction,editAction,insertAction,topAction]
    }*/
    
    //是否容許cell進行編輯 默認容許
    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        
        return true
    }
    
    //是否容許cell排序
    func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
        
        print("是否容許cell排序的響應!")
        return true
    }
    
    //cell排序操做
    func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
        
        self.infoTableView?.moveRow(at: sourceIndexPath, to: destinationIndexPath)
        self.itemArr.exchangeObject(at: sourceIndexPath.row, withObjectAt: destinationIndexPath.row)
        
        print("cell排序響應!")
    }
    
    //選中某個 cell
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
     
        print("cell點擊響應")
    }
    
    //若是須要實現cell按下高亮,手放開恢復原狀態,則實現以下方法便可:
    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        
        tableView.deselectRow(at: indexPath, animated: true)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */
}

 效果以下圖所示:學習

自定義cell側滑操做按鈕效果:spa

public func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle{
        //返回的cell的樣式 是帶有選擇按鈕的樣式
        return UITableViewCellEditingStyle(rawValue: UITableViewCellEditingStyle.RawValue(UInt8(UITableViewCellEditingStyle.insert.rawValue)|UInt8(UITableViewCellEditingStyle.delete.rawValue)))!
     }

 效果以下:代理

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

//此代理方法 返回UITableViewCellEditingStyle.delete cell是刪除的效果以下圖1

//返回UITableViewCellEditingStyle.insert 是插入添加的效果 以下圖2

 圖一:orm

圖二:
blog

歡迎你們的騷擾排序

相關文章
相關標籤/搜索