将搜索栏添加到表视图会返回展开的nil视图

时间:2016-06-16 00:34:06

标签: ios swift

我试图将搜索栏添加到显示名称的表格视图中。当我尝试将其作为副标题添加到我的tableview时,我得到一个解包nil错误。我不知道为什么。标记了发生错误的位置。

import UIKit
class WebpageController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchResultsUpdating {
   var names: [String] = [String]()
    var school: String = String()
    var index: Int = Int()
    var searchResults: [String] = [String]()
    var searchController =  UISearchController(searchResultsController: nil)
    @IBOutlet weak var tables: UITableView!
    var refreshControl: UIRefreshControl!
    override func viewDidLoad() {
        super.viewDidLoad()
        searchController.searchResultsUpdater = self
        searchController.hidesNavigationBarDuringPresentation = false
        searchController.dimsBackgroundDuringPresentation = false
        searchController.searchBar.sizeToFit()
        definesPresentationContext = true
        tables.tableHeaderView = searchController.searchBar //returns error
        names = HtmlController.loadData() as NSArray as! [String]
        clean()
        refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action: #selector(WebpageController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)

        tables.addSubview(refreshControl)

        // Do any additional setup after loading the view.
    }
    func refresh(sender: AnyObject)
    {
        names = HtmlController.loadData() as NSArray as! [String]
        clean()
        tables.reloadData()
        refreshControl.endRefreshing()
    }
    func updateSearchResultsForSearchController(searchController: UISearchController) {
        let searchText = searchController.searchBar.text
        filterContentForSearchText(searchText!)
        tables.reloadData()
    }
    func filterContentForSearchText(searchText: String)
    {
        if(searchText == "")
        {
            searchResults = names
        }
        else{
            searchResults = names.filter({ ( a: String) -> Bool in

                let nameMatch = a.rangeOfString(searchText, options:
                    NSStringCompareOptions.CaseInsensitiveSearch)
                return nameMatch != nil
        })
        }

    }
    @IBOutlet weak var Table: UITableView!
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func clean()
    {
        var length = names.count
        var i = 0;
        var bool = false
        let defaults = NSUserDefaults.standardUserDefaults()
        if defaults.objectForKey("School") == nil
        {
            school = "11Staff"
            defaults.setObject("11", forKey: "School")
        }
        else{
        school = (defaults.objectForKey("School") as! String) + "Staff"
        }

        var extra: [String] = [String]()
       let bundleidentifier = NSBundle.mainBundle().bundleIdentifier
        if let aStreamReader = StreamReader(path: NSBundle.mainBundle().pathForResource(school, ofType: "txt")!)
        {
            defer {
                aStreamReader.close()
            }
            while let line = aStreamReader.nextLine() {
                extra.append(line)
            }
        }
        for String in extra
        {
            while i < length && bool == false
            {
                if((String.rangeOfString(names[i].uppercaseString)) != nil)
                {
                names.removeAtIndex(i)
                i -= 1
                bool = true
                length = names.count
                }
                i+=1;
            }
            bool = false
            i = 0;
        }
    }


    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        if searchController.active
        {
            return searchResults.count
        }
        else{
        return names.count
        }
    }
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell: UITableViewCell
        if let reusedCell = tableView.dequeueReusableCellWithIdentifier("Cell") {
            cell = reusedCell
        } else {
            cell = UITableViewCell(style: .Default, reuseIdentifier: "Cell")
        }
        if let label = cell.textLabel {
            label.text = names[indexPath.row + 1].uppercaseString

        }
        return cell    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        index = indexPath.row
        performSegueWithIdentifier("WebTransfer", sender:self)
    }
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let Destination: WebsiteController = segue.destinationViewController as! WebsiteController
        Destination.index = index

    }

}

0 个答案:

没有答案