我目前遇到的问题是,当我通过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闪烁后的当前输出
请帮助解决为什么桌面视图要去? 控制台中没有错误或信息。
谢谢!
答案 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()
}