为什么我没有在tableView中获得不可见的节头视图?

时间:2015-09-22 19:07:48

标签: ios swift uitableview ios8

这是我的viewController,你可以看到它加载时只能看到三个标题视图。

enter image description here

为什么我没有获得位于初始视图下方的那些标题的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个。我错过了什么?

1 个答案:

答案 0 :(得分:2)

这是预期的行为。

屏幕外的标题视图不存在,因此headerViewForSection将为该部分返回nil。

来自UITableViewreference

  

返回值

     

与该部分关联的标题视图,如果该部分没有标题视图,则为nil。

如果您滚动tableView,您会看到tableView会在屏幕上显示标题视图,并在屏幕外滚动时将其解除分配。

您可以通过记录返回给您的视图的地址来确定。在屏幕外滚动的部分现在返回nil,而现在在屏幕上滚动的部分现在返回视图。

如果您在屏幕外滚动节标题,然后返回屏幕,则tableView实际上会返回该节的不同视图,因为原始节目已被解除分配,并且创建了一个新视图。

如果您需要屏幕外标题的标题,则必须从模型(或dataSource)中检索它们,因为这些部分不存在标题。

您可能需要考虑实施tableView:titleForHeaderInSection:以避免访问headerView的textLabel来获取标题。