UITableView 只显示 10 个单元格/行 [英] UITableView only display 10 cells/rows
问题描述
我的 TableViewController 上有两个范围/选项卡,全部"&前10名".我只希望我的前 10 个"选项卡只显示 10 个单元格/行而不是显示所有内容.请查看我的图片以获得更好的参考.
I have two scopes/tabs on my TableViewController, "All" & "Top 10". I only want my "Top 10" tab to display only 10 cells/rows instead of displaying everything. Do look at my images for better references.
P.S:我的 UITableView 用于使用 firebase 数据库显示我的活动的 30 多个展位的实时结果.另外,case 0 是All",case 1 是Top 10".
P.S: My UITableView is used to display real-time results of over 30 booths for my event using firebase database. Also, case 0 is "All", case 1 is "Top 10".
TableViewController
TableViewController
import UIKit
import FirebaseDatabase
var ref: DatabaseReference?
var databaseHandle: DatabaseHandle?
var postData = [String]()
var postData2 = [String]()
var currentpostDataArray = [String]()
var tableDataArray = [tableData]()
var tableDataArray2 = [tableData]()
var searchArray = [tableData]()
var selectedTab = 0
class TableViewController: UITableViewController, UISearchBarDelegate {
@IBOutlet var searchBar: UISearchBar!
override func viewDidLoad() {
super.viewDidLoad()
setUpSearchBar()
ref = Database.database().reference()//set the firebase reference
databaseHandle = ref?.child("Posts2").observe(.value, with: { (snapshot) in
// Code to execute when a child is added under "Posts"
postData.removeAll()
postData2.removeAll()
tableDataArray.removeAll()
for child in snapshot.children {
let snap = child as! DataSnapshot
let key = snap.key
let value = String(describing: snap.value!)
let rating = (value as NSString).integerValue
postData.append(key)
postData2.append(value)
tableDataArray.append(tableData(boothName: key, boothRating: rating))
currentpostDataArray = postData
}
self.tableView.reloadData()
})
databaseHandle = ref?.child("Posts2").queryOrderedByValue().queryLimited(toLast: 10).observe(.value, with: { (snapshot) in
// Code to execute when a child is added under "Posts"
postData.removeAll()
postData2.removeAll()
tableDataArray2.removeAll()
for child in snapshot.children {
let snap = child as! DataSnapshot
let key = snap.key
let value = String(describing: snap.value!)
let rating = (value as NSString).integerValue
postData.append(key)
postData2.append(value)
tableDataArray2.append(tableData(boothName: key, boothRating: rating))
currentpostDataArray = postData
}
self.tableView.reloadData()
})
}
private func setUpSearchBar() {
searchBar.delegate = self
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return currentpostDataArray.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = currentpostDataArray[indexPath.row]
cell.detailTextLabel?.text = postData2[indexPath.row] + " ♥"
cell.detailTextLabel?.textColor = UIColor.red;
return cell
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
switch searchBar.selectedScopeButtonIndex {
case 0:
selectedTab = 0
searchArray.removeAll()
searchArray = tableDataArray
currentpostDataArray.removeAll()
postData2.removeAll()
if !searchText.isEmpty {
for data in searchArray {
let item = data.boothName
if (item.lowercased().range(of: searchText.lowercased()) != nil)
{
currentpostDataArray.append(data.boothName)
let value = String(describing: data.boothRating)
postData2.append(value)
}
}
}
else {
loadDara()
}
self.tableView.reloadData()
case 1:
selectedTab = 1
searchArray.removeAll()
searchArray = tableDataArray2
currentpostDataArray.removeAll()
postData2.removeAll()
if !searchText.isEmpty {
for data in searchArray {
let item = data.boothName
if (item.lowercased().range(of: searchText.lowercased()) != nil)
{
currentpostDataArray.append(data.boothName)
let value = String(describing: data.boothRating)
postData2.append(value)
}
}
}
else {
loadDara2()
}
self.tableView.reloadData()
default:
break
}
}
func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
switch selectedScope {
case 0:
currentpostDataArray.removeAll()
postData2.removeAll()
for data in tableDataArray {
currentpostDataArray.append(data.boothName)
let value = String(describing: data.boothRating)
postData2.append(value)
}
self.tableView.reloadData()
case 1:
currentpostDataArray.removeAll()
postData2.removeAll()
let sortedTableData = tableDataArray2.sorted(by: { $0.boothRating > $1.boothRating })
for data in sortedTableData {
currentpostDataArray.append(data.boothName)
let value = String(describing: data.boothRating)
postData2.append(value)
}
self.tableView.reloadData()
default:
break
}
tableView.reloadData()
}
func loadDara() {
for data in tableDataArray {
currentpostDataArray.append(data.boothName)
let value = String(describing: data.boothRating)
postData2.append(value)
}
}
func loadDara2() {
let sortedTableData = tableDataArray2.sorted(by: { $0.boothRating > $1.boothRating })
for data in sortedTableData {
currentpostDataArray.append(data.boothName)
let value = String(describing: data.boothRating)
postData2.append(value)
}
}
}
class tableData {
var boothName: String
var boothRating: Int
init(boothName: String, boothRating: Int) {
self.boothName = boothName
self.boothRating = boothRating
}
}
推荐答案
在你的视图控制器中声明一个变量,指向哪个段被选中
Declare a variable in your view controller pointing to which segment is selected
var selectedTab = 0
在selectedScopeButtonIndexDidChange
中,根据选择变化为上述变量赋值:
In selectedScopeButtonIndexDidChange
, assign value to above variable based on selection change:
func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
switch selectedScope {
case 0:
selectedTab = 0
currentpostDataArray.removeAll()
postData2.removeAll()
for data in tableDataArray {
currentpostDataArray.append(data.boothName)
let value = String(describing: data.boothRating)
postData2.append(value)
}
self.tableView.reloadData()
case 1:
selectedTab = 1
currentpostDataArray.removeAll()
postData2.removeAll()
let sortedTableData = tableDataArray.sorted(by: { $0.boothRating > $1.b
oothRating })
for data in sortedTableData {
currentpostDataArray.append(data.boothName)
let value = String(describing: data.boothRating)
postData2.append(value)
}
self.tableView.reloadData()
default:
break
}
tableView.reloadData()
}
在numberOfRowsInSection
中,检查选中的段并设置行数:
In numberOfRowsInSection
, check for selected segment and set row count:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if selectedTab = 0 {
return currentpostDataArray.count
} else {
if currentpostDataArray.count >= 10 {
return 10
} else {
return currentpostDataArray.count
}
}
}
这篇关于UITableView 只显示 10 个单元格/行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!