2016-08-19 45 views
0

我有一個UITableView與sectionIndexTitles。這是我的數據源:sectionForSectionIndexTitle檢索前一節

let sSectionTitles = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","#"] 
var sectionTitles = [String]() 

func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? { 
     return sSectionTitles 
} 

func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int { 
     var section = 0 
     if let selectedSection = sectionTitles.indexOf(title) { 
      section = selectedSection 
     } else { 
      section = index 
     } 
     return section 
} 

變量sectionTitles是一個類似數組sSectionTitles但它僅包含部分指標是有效的。例如,如果我沒有與名稱以字母D開頭的聯繫人,那麼「D」將不在sectionTitles中。

我試圖複製在聯繫人應用程序的行爲:如果用戶點擊標題索引「d」,如果沒有在B區至少一個觸點,然後滾動到

  • 本節。
  • 否則,滾動到上一節。 (在這個例子中,如果沒有B和C字母的聯繫人,則滾動到A)

我一直堅持這個很多小時,我仍然不知道如何應用這個邏輯。我想過使用遞歸函數,但我沒有設法解決這個問題。是否有人在如何實現這個目標方面有任何的領先優勢?

感謝。

回答

1

我認爲你可以通過遞歸來實現。使用另一個輔助函數來檢索適當的索引並從tableview數據源函數調用它。例如,

func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int { 
    var section = getSectionIndex(title) 
    return section 
}   

//recursive function to get section index 
func getSectionIndex(title: String) -> Int { 
    let tmpIndex = sectionTitles.indexOf(title) 
    let mainIndex = sSectionTitles.indexOf(title) 
    if mainIndex == 0 { 
     return 0 
    } 
    if tmpIndex == nil { 
     let newTitle = sSectionTitles[mainIndex!-1] 
     return getSectionIndex(newTitle) 
    } 
    return tmpIndex! 
} 
+0

我試圖實現類似的東西,但我使用的索引,而不是標題,這可能是爲什麼這使我困惑這麼多。我得說,遞歸不是我的一杯茶,但這清除了我對這個問題的大部分困惑。非常感謝。 – Croisciento