选择段时如何从 table 视图加载选定数据?
how to load selected data from a table view when a segment is selected?
I wanted to know how to load selected data from my table view, for example when selecting segment index is equal 1, the table view will reload and will only show data which status is等于认可。因为正如您从我下面的代码中看到的那样,我已经加载了具有所有状态的所有数据:。例如,如果 segmentView.selectedSegmentIndex == 1 table 将重新加载状态等于批准的数据。我已经可以确定所选索引。我想要的是如何从 table 视图访问这些数据,我可以根据状态
加载选定的数据
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Table view cells are reused and should be dequeued using a cell identifier.
let cellIdentifier = "ToDoListTableViewCell"
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! ToDoListTableViewCell
cell.delegate = self
// let toDoActionItem = fetchedResultsController.object(at: indexPath)
if let getTempDetails: [String : Any] = getAllDetail[indexPath.row] {
print("ang tanan data:" , getTempDetails)
if let str = getTempDetails["status"] as? [String: String] {
if let name = str["name"] {
if name == "ongoing" {
cell.toDoItemLabel.text = getTempDetails["name"] as? String
cell.statuslabel.backgroundColor = created
// cell.label.textColor = UIColor(red: 0.9294, green: 0.3333, blue: 0.1804, alpha: 1.0)
// cell.backgroundColor = created
}
else if name == "approved" {
cell.toDoItemLabel.text = getTempDetails["name"] as? String
cell.statuslabel.backgroundColor = done
cell.checkBoxButton.isSelected = true
}
else if name == "for approval" {
cell.toDoItemLabel.text = getTempDetails["name"] as? String
cell.statuslabel.backgroundColor = pending
}else if name == "near expiry" {
cell.toDoItemLabel.text = getTempDetails["name"] as? String
cell.statuslabel.backgroundColor = neardue
} else if name == "expired" {
cell.toDoItemLabel.text = getTempDetails["name"] as? String
cell.statuslabel.backgroundColor = expired
} else {
print("false")
cell.toDoItemLabel.text = "LOLS"
}
}
}
}
code for segment (in selecting segment)
func selectSegmentInSegmentView(segmentView: SMSegmentView) {
if segmentView.selectedSegmentIndex == 1 {
print("ang index nga emo ge click is one")
// let selectedSegment : SMSegment = segmentView.selectedSegment!
// self.userName = selectedSegment.label.text!
} else {
logic here
}
self.setUpTableView()
or could be self.tableView.reloadData()
}
根据所选索引(状态)过滤数组:
func tableView(tableView: UITableView, numberOfRowsInSection section:
Int) -> Int {
switch segmentView.selectedSegmentIndex {
case 0:
if self.expiredArray == nil {
return 0
}
return (self.expiredArray?.count)!
case 1:
if self.approvedArray == nil {
return 0
}
return (self.complaintArray?.count)!
default:
break
}
return 0
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
switch segmentView.selectedSegmentIndex {
case 0:
// Load from expired array
case 1:
// Load from approved array
default:
break
}
return UITableViewCell()
}
func selectSegmentInSegmentView(segmentView: SMSegmentView) {
if segmentView.selectedSegmentIndex == 1 {
// Write your code to filter array here based on status
} else {
// Write your code to filter array here based on status
}
// reload tableview here.....
}
您只需要创建 5 个单独的数组来加载,同时选择 UISegmentControl
的不同段。
var ongoingArr = [[String: Any]]() // For segment index 0
var approvedArr = [[String: Any]]() // For segment index 1
var forApprovalArr = [[String: Any]]() // For segment index 2
var nearExpiryArr = [[String: Any]]() // For segment index 3
var expiredArr = [[String: Any]]() // For segment index 4
您拥有全部数据 getAllDetail
,您正在通过 API 或上一个屏幕获取此数组中的数据:
var getAllDetail = [[String: Any]]()
If you are getting the data from API, then load above 5 arrays after loading the data in getAllDetail
. Fo that just create an extension of array as:
extension Array where Element == [String: Any] {
func filterArray(_ statusName: String) -> [Element] {
return self.filter { infoDict -> Bool in
if let statusDict = infoDict["status"] as? [String: String], let name = statusDict["name"] {
return name == statusName
}
return false
}
}
}
并且,加载超过 5 个数组:
func loadSegmentArray() {
ongoingArr = getAllDetail.filterArray("ongoing")
approvedArr = getAllDetail.filterArray("approved")
forApprovalArr = getAllDetail.filterArray("for approval")
nearExpiryArr = getAllDetail.filterArray("near expiry")
expiredArr = getAllDetail.filterArray("expired")
// Select 0th index of segment and reload table
segmentView.selectedSegmentIndex = 0
self.setUpTableView() // Reload Table view
}
在您的函数 selectSegmentInSegmentView
中,只需重新加载 table 视图:
func selectSegmentInSegmentView(segmentView: SMSegmentView) {
self.setUpTableView()
}
And update your UITabelView
delegate and datasource methods, according to these 5 arrays.
For Sample, I am writing numberOfRowsInSection
and cellForRowAt indexPath
:
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch segmentView.selectedSegmentIndex {
case 0:
return ongoingArr.count
case 1:
return approvedArr.count
case 2:
return forApprovalArr.count
case 3:
return nearExpiryArr.count
case 4:
return expiredArr.count
default:
return 0
}
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "ToDoListTableViewCell"
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! ToDoListTableViewCell
cell.delegate = self
var infoDict = [String: Any]()
switch segmentView.selectedSegmentIndex {
case 0:
infoDict = ongoingArr[indexPath.row]
cell.statuslabel.backgroundColor = // Color of onging
case 1:
infoDict = approvedArr[indexPath.row]
cell.statuslabel.backgroundColor = // Color of approvedArr
case 2:
infoDict = forApprovalArr[indexPath.row]
cell.statuslabel.backgroundColor = // Color of forApprovalArr
case 3:
infoDict = nearExpiryArr[indexPath.row]
cell.statuslabel.backgroundColor = // Color of nearExpiryArr
case 4:
infoDict = expiredArr[indexPath.row]
cell.statuslabel.backgroundColor = // Color of expiredArr
default:
cell.statuslabel.backgroundColor = .black
}
cell.toDoItemLabel.text = infoDict["name"] as? String
return cell
}
最好的选择是:
为显示创建一个通用 array
,用于显示 tableView
中的数据:
并在所有条件下像这样使用它,例如:
像这样创建一个通用函数:
func filterDataStatusWise(strStatus:String){
for dict in arrMainResponse{
let strStatus = arrMainResponse["status"]
if strStatus["name"] = strStatus{
//Whatever data add in arrForDisplay here
}
tableView.reloadData()
}
}
然后像这样使用它:
var arrForDisplay = [String:Any]()
if condition1{
filterDataStatusWise(strStatus: "ongoing")
}else if condition2{
filterDataStatusWise(strStatus: "approved")
}else if condition3{
filterDataStatusWise(strStatus: "for approval")
}else if condition4{
filterDataStatusWise(strStatus: "near expiry")
}else{
filterDataStatusWise(strStatus: "expired")
}
希望对您有所帮助!
I wanted to know how to load selected data from my table view, for example when selecting segment index is equal 1, the table view will reload and will only show data which status is等于认可。因为正如您从我下面的代码中看到的那样,我已经加载了具有所有状态的所有数据:。例如,如果 segmentView.selectedSegmentIndex == 1 table 将重新加载状态等于批准的数据。我已经可以确定所选索引。我想要的是如何从 table 视图访问这些数据,我可以根据状态
加载选定的数据func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Table view cells are reused and should be dequeued using a cell identifier.
let cellIdentifier = "ToDoListTableViewCell"
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! ToDoListTableViewCell
cell.delegate = self
// let toDoActionItem = fetchedResultsController.object(at: indexPath)
if let getTempDetails: [String : Any] = getAllDetail[indexPath.row] {
print("ang tanan data:" , getTempDetails)
if let str = getTempDetails["status"] as? [String: String] {
if let name = str["name"] {
if name == "ongoing" {
cell.toDoItemLabel.text = getTempDetails["name"] as? String
cell.statuslabel.backgroundColor = created
// cell.label.textColor = UIColor(red: 0.9294, green: 0.3333, blue: 0.1804, alpha: 1.0)
// cell.backgroundColor = created
}
else if name == "approved" {
cell.toDoItemLabel.text = getTempDetails["name"] as? String
cell.statuslabel.backgroundColor = done
cell.checkBoxButton.isSelected = true
}
else if name == "for approval" {
cell.toDoItemLabel.text = getTempDetails["name"] as? String
cell.statuslabel.backgroundColor = pending
}else if name == "near expiry" {
cell.toDoItemLabel.text = getTempDetails["name"] as? String
cell.statuslabel.backgroundColor = neardue
} else if name == "expired" {
cell.toDoItemLabel.text = getTempDetails["name"] as? String
cell.statuslabel.backgroundColor = expired
} else {
print("false")
cell.toDoItemLabel.text = "LOLS"
}
}
}
}
code for segment (in selecting segment)
func selectSegmentInSegmentView(segmentView: SMSegmentView) {
if segmentView.selectedSegmentIndex == 1 {
print("ang index nga emo ge click is one")
// let selectedSegment : SMSegment = segmentView.selectedSegment!
// self.userName = selectedSegment.label.text!
} else {
logic here
}
self.setUpTableView()
or could be self.tableView.reloadData()
}
根据所选索引(状态)过滤数组:
func tableView(tableView: UITableView, numberOfRowsInSection section:
Int) -> Int {
switch segmentView.selectedSegmentIndex {
case 0:
if self.expiredArray == nil {
return 0
}
return (self.expiredArray?.count)!
case 1:
if self.approvedArray == nil {
return 0
}
return (self.complaintArray?.count)!
default:
break
}
return 0
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
switch segmentView.selectedSegmentIndex {
case 0:
// Load from expired array
case 1:
// Load from approved array
default:
break
}
return UITableViewCell()
}
func selectSegmentInSegmentView(segmentView: SMSegmentView) {
if segmentView.selectedSegmentIndex == 1 {
// Write your code to filter array here based on status
} else {
// Write your code to filter array here based on status
}
// reload tableview here.....
}
您只需要创建 5 个单独的数组来加载,同时选择 UISegmentControl
的不同段。
var ongoingArr = [[String: Any]]() // For segment index 0
var approvedArr = [[String: Any]]() // For segment index 1
var forApprovalArr = [[String: Any]]() // For segment index 2
var nearExpiryArr = [[String: Any]]() // For segment index 3
var expiredArr = [[String: Any]]() // For segment index 4
您拥有全部数据 getAllDetail
,您正在通过 API 或上一个屏幕获取此数组中的数据:
var getAllDetail = [[String: Any]]()
If you are getting the data from API, then load above 5 arrays after loading the data in
getAllDetail
. Fo that just create an extension of array as:
extension Array where Element == [String: Any] {
func filterArray(_ statusName: String) -> [Element] {
return self.filter { infoDict -> Bool in
if let statusDict = infoDict["status"] as? [String: String], let name = statusDict["name"] {
return name == statusName
}
return false
}
}
}
并且,加载超过 5 个数组:
func loadSegmentArray() {
ongoingArr = getAllDetail.filterArray("ongoing")
approvedArr = getAllDetail.filterArray("approved")
forApprovalArr = getAllDetail.filterArray("for approval")
nearExpiryArr = getAllDetail.filterArray("near expiry")
expiredArr = getAllDetail.filterArray("expired")
// Select 0th index of segment and reload table
segmentView.selectedSegmentIndex = 0
self.setUpTableView() // Reload Table view
}
在您的函数 selectSegmentInSegmentView
中,只需重新加载 table 视图:
func selectSegmentInSegmentView(segmentView: SMSegmentView) {
self.setUpTableView()
}
And update your
UITabelView
delegate and datasource methods, according to these 5 arrays.For Sample, I am writing
numberOfRowsInSection
andcellForRowAt indexPath
:
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch segmentView.selectedSegmentIndex {
case 0:
return ongoingArr.count
case 1:
return approvedArr.count
case 2:
return forApprovalArr.count
case 3:
return nearExpiryArr.count
case 4:
return expiredArr.count
default:
return 0
}
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "ToDoListTableViewCell"
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! ToDoListTableViewCell
cell.delegate = self
var infoDict = [String: Any]()
switch segmentView.selectedSegmentIndex {
case 0:
infoDict = ongoingArr[indexPath.row]
cell.statuslabel.backgroundColor = // Color of onging
case 1:
infoDict = approvedArr[indexPath.row]
cell.statuslabel.backgroundColor = // Color of approvedArr
case 2:
infoDict = forApprovalArr[indexPath.row]
cell.statuslabel.backgroundColor = // Color of forApprovalArr
case 3:
infoDict = nearExpiryArr[indexPath.row]
cell.statuslabel.backgroundColor = // Color of nearExpiryArr
case 4:
infoDict = expiredArr[indexPath.row]
cell.statuslabel.backgroundColor = // Color of expiredArr
default:
cell.statuslabel.backgroundColor = .black
}
cell.toDoItemLabel.text = infoDict["name"] as? String
return cell
}
最好的选择是:
为显示创建一个通用 array
,用于显示 tableView
中的数据:
并在所有条件下像这样使用它,例如:
像这样创建一个通用函数:
func filterDataStatusWise(strStatus:String){
for dict in arrMainResponse{
let strStatus = arrMainResponse["status"]
if strStatus["name"] = strStatus{
//Whatever data add in arrForDisplay here
}
tableView.reloadData()
}
}
然后像这样使用它:
var arrForDisplay = [String:Any]()
if condition1{
filterDataStatusWise(strStatus: "ongoing")
}else if condition2{
filterDataStatusWise(strStatus: "approved")
}else if condition3{
filterDataStatusWise(strStatus: "for approval")
}else if condition4{
filterDataStatusWise(strStatus: "near expiry")
}else{
filterDataStatusWise(strStatus: "expired")
}
希望对您有所帮助!