最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift實現(xiàn)表格視圖單元格多選

 更新時間:2022年01月26日 15:29:13   作者:Hierarch_Lee  
這篇文章主要為大家詳細介紹了Swift實現(xiàn)表格視圖單元格多選,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Swift實現(xiàn)表格視圖單元格多選的具體代碼,供大家參考,具體內(nèi)容如下

效果

前言

這段時間比較忙,沒太多的時間寫博客,前段時間寫了一些關于表格視圖單選的文章,想著,一并把多選也做了,今天剛好有時間,去做這樣一件事情。多選在我們的應用程序中也是常見的,比如消息的刪除,群發(fā)聯(lián)系人的選擇,音樂的添加等等可能都會涉及到多選的需求,本文,我將模擬多選刪除消息來講講多選的實現(xiàn)。

原理

多選刪除其實很簡單,并不復雜,我的思路就是創(chuàng)建一個數(shù)組,當用戶選中某個單元格的時候,取到單元格上對應的數(shù)據(jù),把它存入數(shù)組中,如果用戶取消選中,直接將數(shù)據(jù)從數(shù)組中移除。當用戶點擊刪除時,直接遍歷數(shù)組,將表格視圖數(shù)據(jù)源數(shù)組里面的與存選擇數(shù)據(jù)的數(shù)組中的數(shù)據(jù)相對應一一刪除,再刷新表格視圖即可。

實現(xiàn)

界面搭建很簡單,創(chuàng)建一個表格視圖,添加導航欄,并在上面添加一個刪除按鈕,這里我就不細說了。

ViewController 中,我們先聲明幾個屬性,其中 selectedDatas 主要用于記錄用戶選擇的數(shù)據(jù)。

var tableView: UITableView?
var dataSource: [String]?
var selectedDatas: [String]?

創(chuàng)建初始化方法,初始化屬性,別忘了還需要在 ViewDidLoad()中調(diào)用方法初始化方法。

// MARK:Initialize methods
func initializeDatasource() {

? ? self.selectedDatas = []

? ? self.dataSource = []

? ? for index in 1...10 {
? ? ? ? index < 10 ? self.dataSource?.append("消息0\(index)") : self.dataSource?.append("消息\(index)")
? ? }
}

func initializeUserInterface() {

? ? self.title = "消息"
? ? self.automaticallyAdjustsScrollViewInsets = false

? ? // Add delete navigation item
? ? self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "刪除", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("respondsToBarButtonItem:"))

? ? // table view
? ? self.tableView = {
? ? ? ? let tableView = UITableView(frame: CGRectMake(0, 64, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds)), style: UITableViewStyle.Plain)
? ? ? ? tableView.dataSource = self
? ? ? ? tableView.delegate = self
? ? ? ? tableView.tableFooterView = UIView()
? ? ? ? return tableView
? ? ? ? }()
? ? self.view.addSubview(self.tableView!) ??
}

此時,系統(tǒng)會報警告,提示你沒有遵守協(xié)議,因為我們在初始化表格視圖的時候為其設置了代理和數(shù)據(jù)源,遵守協(xié)議,并實現(xiàn)協(xié)議方法,配置數(shù)據(jù)源。

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
? ? return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

? ? return self.dataSource!.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

? ? var cell: CustomTableViewCell? = tableView.dequeueReusableCellWithIdentifier("cellReuseIdentifier") as? CustomTableViewCell
? ? if cell == nil {
? ? ? ? cell = CustomTableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "cellReuseIdentifier")
? ? }

? ? cell!.selectionStyle = UITableViewCellSelectionStyle.None
? ? cell!.textLabel?.text = self.dataSource![indexPath.row]
? ? cell!.detailTextLabel?.text = "昨天 10-11"

? ? return cell!
}

這里需要強調(diào)的是,表格視圖的單元格是自定義的,在自定義單元格(CustomTableViewCell)中我只做了一個操作,就是根據(jù)單元格選中狀態(tài)來切換圖片的顯示。

override func setSelected(selected: Bool, animated: Bool) {
? ? super.setSelected(selected, animated: animated)

? ? if selected {
? ? ? ? self.imageView?.image = UIImage(named: "iconfont-selected")
? ? }else {
? ? ? ? self.imageView?.image = UIImage(named: "iconfont-select")
? ? }
}

現(xiàn)在運行程序,界面已經(jīng)顯示出來了,下面我們將開始處理多選刪除的邏輯,當我們點擊單元格的時候發(fā)現(xiàn),只能單選???我要怎么去多選呢?此時我們需要在配置表格視圖的地方設置 allowsMultipleSelection 屬性,將其值設為 YES。

tableView.allowsMultipleSelection = true

接下來,實現(xiàn)代理方法 didSelectRowAtIndexPath:didDeselectRowAtIndexPath:,這里我們將修改單元格選中與未選中狀態(tài)下的顏色,只需根據(jù)參數(shù)indexPath獲取到單元格,修改 backgroundColor 屬性,并且,我們還需要獲取單元格上的數(shù)據(jù),去操作selectedDatas數(shù)組,具體實現(xiàn)如下。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

? ? let cell = tableView.cellForRowAtIndexPath(indexPath)
? ? cell?.backgroundColor = UIColor.cyanColor()

? ? self.selectedDatas?.append((cell!.textLabel?.text)!)

}

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {

? ? let cell = tableView.cellForRowAtIndexPath(indexPath)
? ? cell?.backgroundColor = UIColor.whiteColor()

? ? let index = self.selectedDatas?.indexOf((cell?.textLabel?.text)!)
? ? self.selectedDatas?.removeAtIndex(index!)
}

didDeselectRowAtIndexPath:方法中,我是根據(jù)表格視圖單元格上的數(shù)據(jù)獲取下標,再從數(shù)組中刪除元素的,可能有的人會問,不能像OC一樣調(diào)用removeObject:方法根據(jù)數(shù)據(jù)直接刪除元素嗎?并不能,因為Swift 提供的刪除數(shù)組元素的方法中,大都是根據(jù)下標來刪除數(shù)組元素的。

接下來,我們需要執(zhí)行刪除邏輯了,在刪除按鈕觸發(fā)的方法中,我們要做的第一件事情就是異常處理,如果 selectedDatas 數(shù)組為空或者該數(shù)組并未初始化,我們無需再做刪除處理,彈框提示即可。

// Exception handling
if (self.selectedDatas == nil) || (self.selectedDatas?.isEmpty == true) {
? ? let alertController = UIAlertController(title: "溫馨提示", message: "請選擇您要刪除的數(shù)據(jù)!", preferredStyle: UIAlertControllerStyle.Alert)
? ? alertController.addAction(UIAlertAction(title: "確定", style: UIAlertActionStyle.Default, handler: nil))
? ? self.presentViewController(alertController, animated: true, completion: nil)
? ? return
}

異常處理之后,我們需要遍歷selectedDatas數(shù)組,然后根據(jù)該數(shù)組中的數(shù)據(jù)獲取到該數(shù)據(jù)在數(shù)據(jù)源(dataSource)里的下標,最后再根據(jù)該下標將數(shù)據(jù)從數(shù)據(jù)源中刪除。

for data in self.selectedDatas! {

? ? // Get index with data
? ? let index = self.dataSource!.indexOf(data)

? ? // Delete data with index
? ? self.dataSource?.removeAtIndex(index!)
}

現(xiàn)在我們只需要刷新表格視圖即可,當然,selectedDatas數(shù)組我們也需要清空,以備下一次用戶多選刪除使用。

self.tableView?.reloadData()

self.selectedDatas?.removeAll()

為了提高用戶體驗,我們可以彈框提示用戶刪除成功,直接在后面加上以下代碼。

let alertController = UIAlertController(title: "溫馨提示", message: "數(shù)據(jù)刪除成功!", preferredStyle: UIAlertControllerStyle.Alert)

self.presentViewController(alertController, animated: true, completion: nil)


dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1.0 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) { () -> Void in
? ? self.presentedViewController?.dismissViewControllerAnimated(true, completion: nil)
}

代碼中,我并未給彈出框添加action ,而是通過一個延遲調(diào)用,來讓彈出框自動消失,這樣就避免了用戶再次點擊彈出框按鈕來隱藏,提升用戶體驗。

OK,到了這一步,基本已經(jīng)實現(xiàn)了,但是有一個小瑕疵,那就是當我刪除了單元格的時候,界面上某些單元格會呈現(xiàn)選中狀態(tài)的背景顏色,解決辦法非常簡單,我們只需要在配置單元格的協(xié)議方法中加上這一句話即可。

cell?.backgroundColor = UIColor.whiteColor()

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Swift教程之下標詳解

    Swift教程之下標詳解

    這篇文章主要介紹了Swift教程之下標詳解,本文講解了下標語法、下標的使用、下標選項等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • 利用swift實現(xiàn)卡片橫向滑動動畫效果的方法示例

    利用swift實現(xiàn)卡片橫向滑動動畫效果的方法示例

    卡片橫向滑動動畫效果相信對大家來說都不陌生,下面這篇文章主要給大家介紹了關于利用swift實現(xiàn)卡片橫向滑動動畫效果的方法示例,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • Swift開發(fā)中switch語句值綁定模式

    Swift開發(fā)中switch語句值綁定模式

    本文給大家分享Swift開發(fā)中switch語句值綁定模式,非常不錯,具有參考借鑒價值,需要的的朋友參考下
    2016-12-12
  • Swift教程之閉包詳解

    Swift教程之閉包詳解

    這篇文章主要介紹了Swift教程之閉包詳解,閉包可以在上下文的范圍內(nèi)捕獲、存儲任何被定義的常量和變量引用,因這些常量和變量的封閉性,而命名為“閉包(Closures)”,需要的朋友可以參考下
    2015-01-01
  • 超全面的Swift編碼規(guī)范(推薦)

    超全面的Swift編碼規(guī)范(推薦)

    這篇文章主要給大家介紹了關于Swift編碼規(guī)范的相關資料,文中介紹的非常詳細,對大家開發(fā)swift具有一定的參考價值,需要的朋友可以參考學習,下面來一起看看吧。
    2017-03-03
  • Swift中用到extension的一些基本的擴展功能講解

    Swift中用到extension的一些基本的擴展功能講解

    這篇文章主要介紹了Swift的一些基本的擴展功能,即extension關鍵字的使用,需要的朋友可以參考下
    2015-11-11
  • Objective-C中的block與Swift中的尾隨閉包使用教程

    Objective-C中的block與Swift中的尾隨閉包使用教程

    Block是OC中的閉包,他和swift中的閉包有什么區(qū)別呢?下面這篇文章就來給大家介紹關于Objective-C中的block與Swift中的尾隨閉包使用的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-12-12
  • Swift利用CoreData實現(xiàn)一個通訊錄存儲詳解

    Swift利用CoreData實現(xiàn)一個通訊錄存儲詳解

    這篇文章主要給大家介紹了關于Swift利用CoreData實現(xiàn)一個通訊錄存儲的相關資料,本文是大家學習coreDate的基礎問題,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-12-12
  • 深入解析Swift編程中枚舉類型的相關使用

    深入解析Swift編程中枚舉類型的相關使用

    這篇文章主要介紹了Swift編程中枚舉類型的相關使用,是Swift入門學習中的基礎知識,需要的朋友可以參考下
    2015-11-11
  • Swift數(shù)組詳細用法解析

    Swift數(shù)組詳細用法解析

    這篇文章主要為大家詳細介紹了Swift數(shù)組詳細用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評論

班玛县| 临猗县| 讷河市| 甘孜| 莒南县| 呼伦贝尔市| 女性| 凌海市| 湖口县| 红安县| 新兴县| 阿克陶县| 定州市| 郸城县| 庐江县| 泗阳县| 偏关县| 镇康县| 陆川县| 琼海市| 晋江市| 彩票| 华坪县| 沂源县| 崇礼县| 普格县| 兴化市| 措美县| 儋州市| 丰台区| 淮滨县| 芦溪县| 台东市| 渑池县| 克拉玛依市| 富平县| 鄂州市| 贺兰县| 琼海市| 阿克陶县| 岳西县|