如何在表格视图中删除空单元格? iOS Swift [英] How do I remove empty cells in table view? iOS Swift

查看:61
本文介绍了如何在表格视图中删除空单元格? iOS Swift的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的表格视图当前如下所示:

My table view currently looks like this:

注意:我已经模糊了实际的名称。

Note: I have blurred out actually names.

我导入一个json文件并从中检索名称。名称出现在表格视图中。在我的ViewController中,如果json文件中的location字段为nil,则返回一个空单元格。

I import a json file and retrive names from it. The names appear on the table view. In my ViewController I return an empty cell if the location field is nil in the json file.

如何删除空单元格?

我尝试过

tableView.tableFooterView = UIView()

但这不起作用

这是我的ViewController类:

Here is my ViewController class:

import UIKit

class ViewController: UITableViewController, UITableViewDataSource,     UITableViewDelegate, UISearchResultsUpdating {

//manages search bar
var searchController:UISearchController!

var contacts = [Contact]()

//array to hold contacts that match the search results
var filteredContacts = [Contact]()

override func viewDidLoad() {

    super.viewDidLoad()

    //initialize the defaults manager class
    NSUserDefaultsManager.initializeDefaults()

    //search controller
    searchController = UISearchController(searchResultsController: nil)
    searchController.searchBar.sizeToFit()
    tableView.tableHeaderView = searchController.searchBar
    definesPresentationContext = true

    searchController.searchResultsUpdater = self
    searchController.dimsBackgroundDuringPresentation = false

    //load the contacts
    title = "Contacts"

    contacts = [Contact]()
    let api = ContactAPI()
    api.loadContacts(didLoadContacts)

}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    //reload the table view to check for new contacts
    tableView.reloadData()

    //change nav bar to be more transparent
    navigationController?.navigationBar.alpha = 0.5

}

//MARK: -Helper Methods

// Uupdate searching results
func updateSearchResultsForSearchController(searchController: UISearchController) {

    let searchText = searchController.searchBar.text
    filterContentForSearchText(searchText)
    tableView.reloadData()

}

func filterList() { // should probably be called sort and not filter
    contacts.sort() { $0.name < $1.name } // sort the fruit by name
    //tableView.reloadData(); // notify the table view the data has changed
}

func didLoadContacts(contacts: [Contact]){
    self.contacts = contacts
    filterList()
    tableView.reloadData()
}

//MARK: -Table View

//set number opf sections in table view
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

//delegeate that tells tabel view how many cells to have
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    //return size of array

    //if searching show count of filtered contacts
    if (searchController.active){

        return self.filteredContacts.count

    }else{

        return self.contacts.count

    }

}

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

    let cell = self.tableView.dequeueReusableCellWithIdentifier("customcell") as! CustomCell //from the customcell class

    //change color of cell text label
    cell.textLabel?.textColor = UIColor.blackColor()

    let contact : Contact

    //if users is searching then return filtered contacts
    if (searchController.active){

        contact = self.filteredContacts[indexPath.row]

    }else{

        contact = self.contacts[indexPath.row]

    }

    if contact.location == "nil"{
        return cell
    }


    //handel assignment of text
    cell.textLabel?.text = contact.name

    //retrieve from customcell class
    cell.contact = contact

    return cell
}


//MARK: -Search

func filterContentForSearchText(searchText: String, scope: String = "Title")
{
    self.filteredContacts = self.contacts.filter({( contact: Contact) -> Bool in

        //filters contacts array

        var categoryMatch = (scope == "Title")
        var stringMatch = contact.name?.rangeOfString(searchText)

        return categoryMatch && (stringMatch != nil)

    })
}

func searchDisplayController(controller: UISearchController, shouldReloadTableForSearchString searchString: String!) -> Bool {

    self.filterContentForSearchText(searchString, scope: "Title")

    return true

}


func searchDisplayController(controller: UISearchController, shouldReloadTableForSearchScope searchOption: Int) -> Bool {

    self.filterContentForSearchText(self.searchController!.searchBar.text, scope: "Title")

    return true

}

//MARK: -Segue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if(segue.identifier == "detailview"){
        let cell = sender as! CustomCell
        let detailView = segue.destinationViewController as! DetailViewController
        detailView.preContact = cell.contact

    }
}

}


推荐答案

您需要过滤掉没有位置的人

You need to filter out the ones that don't have a location

func filterList() { // should probably be called sort and not filter
  contacts.sort() { $0.name < $1.name } // sort the fruit by name
  contacts = contacts.filter { $0.location != nil }
  //tableView.reloadData(); // notify the table view the data has changed
}

这篇关于如何在表格视图中删除空单元格? iOS Swift的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆