加载

时间:2016-02-09 20:40:52

标签: ios swift uitableview

我目前遇到的问题是,当我通过IB创建UITableView并显示它时。 UITableView加载正常,它显示我的4个单元格,然后立即消失。

我相信tableview正在消失,因为容器视图背景可以更改并且仍然存在。

在点击嵌入到UINavigationBar中的UISearchBar之后,我从故事板加载UITableView。 然后我将其插入容器中。然后使用UITableView在屏幕上显示容器。

通过以下方式调用:

var searchFestivalTableViewContainer: UIView?

func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
    showSearchView()
}

func showSearchView() {

    searchBar.showsCancelButton = true

    let storyboard = UIStoryboard(name: "Main", bundle: nil)

    // Setup the festival search controller inside the container

    searchFestivalTableViewContainer = UIView(frame: CGRectMake(0, 64, UIScreen.mainScreen().bounds.width, (UIScreen.mainScreen().bounds.height-64)))
    searchFestivalTableViewContainer!.backgroundColor = UIColor.clearColor()


    let searchFestivalTableController = storyboard.instantiateViewControllerWithIdentifier("searchFestivalTableViewController") as? searchFestivalTableViewController

    searchFestivalTableController!.festivalList = allFestivals!

    searchFestivalTableViewContainer!.addSubview(searchFestivalTableController!.view)

    self.view.addSubview(searchFestivalTableViewContainer!)

}

该课程的代码是:

class searchFestivalTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var festivalList: [Festival]?

struct Objects {
    var sectionName : String!
    var sectionObjects : [Festival]!
}

var allFestivals = [Objects]()

@IBOutlet weak var tableView: UITableView!

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func viewDidLoad() {
    super.viewDidLoad()

    allFestivals = getFestivals()

    tableView.reloadData()

}

func getFestivals() -> Array<Objects> {

    var festivalSearchResult  = [String: Array<Festival>]()

    festivalSearchResult["Results"] = [Festival(// Hiding data structure)]

    var objectArray = [Objects]()

    for festival in festivalList! {

        festivalSearchResult["Results"]!.append(festival)

    }

    let sortedFestivals = festivalSearchResult.sort { $0.0 < $1.0 }

    for (key, value) in sortedFestivals {
        objectArray.append(Objects(sectionName: key, sectionObjects: value))
    }


    return objectArray
}



func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return allFestivals.count
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return allFestivals[section].sectionObjects.count
}

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

    let sectionHeader = allFestivals[section].sectionName

    return sectionHeader

}


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

        let festivalInfo = allFestivals[indexPath.section].sectionObjects[indexPath.row]

        let cell = tableView.dequeueReusableCellWithIdentifier("searchFestivalTableCell", forIndexPath: indexPath) as! searchFestivalTableViewCell

        cell.textLabel?.text = festivalInfo.festivalName

        return cell


    }


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

        // Nothing to do here yet

    }

}

class searchFestivalTableViewCell: UITableViewCell  {

    override func awakeFromNib() {
        super.awakeFromNib()
    }

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

这是tableview闪烁后的当前输出

Link to image

请帮助解决为什么桌面视图要去? 控制台中没有错误或信息。

谢谢!

3 个答案:

答案 0 :(得分:2)

我认为您应该将 searchFestivalTableViewController 添加为view controller作为view,然后再将subview添加为id。虽然不确定,但这是我试图完成它的方式。更多信息: https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html

答案 1 :(得分:0)

你似乎有一个UIViewController,你应该使用UITableViewController,因为它包含了你想要的所有东西。

要解决您的问题,请尝试设置tableView.dataSource = self和tableView.delegate = self

答案 2 :(得分:0)

不完全确定你在做什么,但我通过添加解决了一个类似的问题。

override func viewWillAppear(animated: Bool) {

    self.tableView.reloadData()


}