sectionIndexTitles映射不能正常工作



我有这个数据结构在我的iOS项目有一个tableView从sqlite3数据库填充。

struct Song {
let id: Int
let songTitle: String
let movieName: String
let songSinger: String
let musicDirector: String
let songLyrics: String
let movieReleased: String
let songScale: String
let leadCast: String
let songTrivia: String
let scaleURL: String
let youtubeURL: String
let lyricsURL: String
}

这就是我如何创建我的sectionIndexTitlesArray:

var movieSet = Set<String>()
for song in songList {
movieSet.insert(song.movieName)

let firstLetter = String(song.movieName.prefix(1))
if !firstLetters.contains(firstLetter) {
firstLetters.append(firstLetter)
}
uniqueMovies = Array(movieSet)
uniqueMovies.sort()
sectionIndexTitles = firstLetters.sorted()
}

这是我如何创建数节:

func numberOfSections(in tableView: UITableView) -> Int {
if isSearching == true {
return 1
} else {
return uniqueMovies.count
}     
}

这是关于section

的行数的函数
if isSearching == true {
return filteredSongs.count
} else {
let sectionTitle = uniqueMovies[section]
let sectionData = songList.filter { $0.movieName == sectionTitle }
return sectionData.count
}
这是titleForHeaderSection 的函数
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
if isSearching == true {
return nil
} else {
return "  "+uniqueMovies[section]
}
}
这是sectionIndexTitles 的函数
func sectionIndexTitles(for tableView: UITableView) -> [String]? {
if isSearching == true {
return nil
}  else {
return sectionIndexTitles
}
}

是sectionForSectionIndexTitles的函数

func sectionForSectionIndexTitle(title: String, atIndex index: Int) -> Int {
return sectionIndexTitles.firstIndex(of: title)!
}

问题是,当我点击右边索引标题的字母时,它不会跳转到相应的部分。相反,它跳转到与sectionTitles的索引匹配的section。例如,如果我点击"D",它跳转到第4 sectionHeader。怎么了?

问题是可以有多个以相同字母开头的部分。所以你可能在uniqueMovies中有5个值都以字母"A"开头,7个值以字母"B"开头,3个值以字母"C"等等。

如果用户轻按字母A,您希望进入第0部分。对于字母B,你要去第5部分。对于字母C,你要去第12部分。对于字母D,你要去第15部分,等等。

所以你的sectionForSectionIndexTitle的实现不能简单地找到sectionIndexTitles中字母的索引。您需要找到uniqueMovies中以字母开头的第一个索引。

func sectionForSectionIndexTitle(title: String, atIndex index: Int) -> Int {
return uniqueMovies.firstIndex { $0.hasPrefix(title) } ?? 0
}

相关内容

  • 没有找到相关文章

最新更新