这是我的viewController,你可以看到它加载时只能看到三个标题视图。
为什么我没有获得位于初始视图下方的那些标题的headerView文本标签文本。我总共有6个部分,总共对应6个标题视图。
这是我的代码:
//
// FillinTheBlanksTableViewController.swift
// GetJobbed
//
// Created by Rustam Allakov on 9/22/15.
// Copyright (c) 2015 Rustam Allakov. All rights reserved.
//
import UIKit
class FillinTheBlanksTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
//
// print("the first section name is: ")
// println(tableView.headerViewForSection(0)!.textLabel.text!)
let headerNames = getSectionNames()
println(headerNames)
print("the number of sections in a tableview ")
println(tableView.numberOfSections())
}
//get all the sections you got
func getVisibleSectionNames () -> [String] {
var headerNames = [String]()
if let indexPaths = tableView.indexPathsForVisibleRows() as? [NSIndexPath] {
headerNames = indexPaths.map { [unowned self] indexPath -> String in
let section = indexPath.section
if let headerText = self.tableView.headerViewForSection(section) {
return headerText.textLabel.text!
} else {
return ""
}
}
}
return headerNames
}
///array of strings with names of the headerViews in a tableview
//why I am not getting the not visible part of my table view?
func getSectionNames() -> [String] {
var sectionNames = [String]()
//how many section do my table view got ?
for i in 0..<tableView.numberOfSections() {
// if let headerView = tableView.headerViewForSection(i) {
// println("the header number \(i)")
// sectionNames.append(headerView.textLabel.text!)
// } else {
// println("i am not getting these \(i)")
//
// }
let headerView = tableView.headerViewForSection(i)
sectionNames.append(headerView?.textLabel.text ?? "not retreived header")
}
return sectionNames
}
}
打印到控制台:
标题信息
教育
工作经历
没有被检索的标题
未检索标题
没有后退的标题
我只能检索6个部分标题中的3个。我错过了什么?
答案 0 :(得分:2)
这是预期的行为。
屏幕外的标题视图不存在,因此headerViewForSection
将为该部分返回nil。
来自UITableView
班reference:
返回值
与该部分关联的标题视图,如果该部分没有标题视图,则为nil。
如果您滚动tableView
,您会看到tableView
会在屏幕上显示标题视图,并在屏幕外滚动时将其解除分配。
您可以通过记录返回给您的视图的地址来确定。在屏幕外滚动的部分现在返回nil,而现在在屏幕上滚动的部分现在返回视图。
如果您在屏幕外滚动节标题,然后返回屏幕,则tableView实际上会返回该节的不同视图,因为原始节目已被解除分配,并且创建了一个新视图。
如果您需要屏幕外标题的标题,则必须从模型(或dataSource)中检索它们,因为这些部分不存在标题。
您可能需要考虑实施tableView:titleForHeaderInSection:
以避免访问headerView的textLabel来获取标题。