- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 tableview 的单元格上有三个标签。一个显示名称,第二个显示大小,第三个显示日期。我有三个参数对 tableview 的单元格进行排序,即名称、大小和日期。
我希望当我单击名称时,单元格会按升序排列显示其名称,当我单击大小时,它应该根据大小升序排列,当我单击日期时,它应该根据日期升序排列,其余两个标签应根据各自的名称、尺寸或日期排列。
我只能对名称、尺寸和日期进行排序。使用以下代码:
@IBAction func indexChanged(_ sender: UISegmentedControl) {
if(itemArray.count>1){
switch sender.selectedSegmentIndex {
case 0:
sortedNameArray = fileNameArray.sorted {$0.localizedStandardCompare($1) == .orderedAscending}
sortParameter = "name"
mediaTableView.reloadData()
print("sorted name array",sortedNameArray)
break
case 1:
sortedSizeArray = fileSizeArray.sorted {$0.localizedStandardCompare($1) == .orderedAscending}
print("sorted Size array",sortedSizeArray)
sortParameter = "size"
mediaTableView.reloadData()
print("1")
case 2:
sortedDateArray = dateArray.sorted(by: { $0.compare($1) == .orderedAscending })
print("sorted date array",sortedDateArray)
sortParameter = "date"
mediaTableView.reloadData()
default:
break;
}
}
}
}
func tableView(_ tableView:UITableView , cellForRowAt IndexPath:IndexPath)->UITableViewCell{
let cell = tableView.dequeueReusableCell(withIdentifier:"mediaCell",for:IndexPath) as! MediaCustomCell
if(sortParameter == ""){
if(itemArray.count>0){
let urlString: String = itemArray[IndexPath.row].absoluteString
let fileName = (urlString as NSString).lastPathComponent
fileNameArray.append(fileName)
do {
//size
let resources = try itemArray[IndexPath.row].resourceValues(forKeys:[.fileSizeKey])
let fileSize = resources.fileSize!
let fileSizeValue = self.transformedValue(value: fileSize)
cell.fileSizeLbl.text = String.init(format:"%@",fileSizeValue as! CVarArg)
fileSizeArray.append(cell.fileSizeLbl.text!)
//date
let fileCreatedDate = try itemArray[IndexPath.row].resourceValues(forKeys:[.creationDateKey])
let dateCreated = fileCreatedDate.creationDate
dateArray.append(dateCreated!)
cell.createdDateLbl.text = String.init(format:"%@",dateCreated! as CVarArg)
print ("filesize",fileSizeValue)
} catch {
print("Error: \(error)")
}
cell.itemLbl.text = fileName
}
}
//when it gets sorted on the basis of name
else if(sortParameter == "name"){
//name
cell.itemLbl.text=sortedNameArray[IndexPath.row]
let fileManager = FileManager.default
let documentsURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0]
let fullpath = documentsURL.appendingPathComponent(sortedNameArray[IndexPath.row])
//size
do{
let resources = try fullpath.resourceValues(forKeys:[.fileSizeKey])
let fileSize = resources.fileSize!
let fileSizeValue = self.transformedValue(value: fileSize)
cell.fileSizeLbl.text = String.init(format:"%@",fileSizeValue as! CVarArg)
}catch{
print("error")
}
//date
let path = documentsURL.appendingPathComponent(sortedNameArray[IndexPath.row])
do{
let fileCreatedDate = try path.resourceValues(forKeys:[.creationDateKey])
let dateCreated = fileCreatedDate.creationDate
cell.createdDateLbl.text = String.init(format:"%@",dateCreated! as CVarArg)
}
catch{
print("error")
}
}
else if(sortParameter == "size"){
cell.fileSizeLbl.text = sortedSizeArray[IndexPath.row]
}
else if(sortParameter == "date"){
cell.createdDateLbl.text = String.init(format:"%@",sortedDateArray[IndexPath.row] as CVarArg)
}
return cell
}
}
func checkFileForExistence(){
let fileManager = FileManager.default
let documentsURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0]
do {
let fileURLs = try fileManager.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil)
print("file urls",fileURLs)
for files in fileURLs{
if files.absoluteString.contains(".mp4")||files.absoluteString.contains(".mov")||files.absoluteString.contains(".MOV")||files.absoluteString.contains(".m4a"){
itemArray.append(files)
}
}
} catch {
print("Error while enumerating files", (error.localizedDescription))
}
}
问题:-我可以根据名称、大小或日期对它们进行排序,但其余两个标签显示过时的数据。我的意思是,如果现在 nameLabel1 排在第一位,它仍然显示标签 2 的大小和标签 3 的日期。我对 swift 还太陌生。请帮助我解决这个问题。任何形式的帮助或建议将不胜感激。提前致谢!
最佳答案
您应该为数据使用模型结构,而不是创建 3 个不同的数组。
struct File
{
var name:String!
var size:String!
var date:Date!
}
然后使用创建的 struct
类型创建两个数组。
var allFileDetails:[File]!
var sortedFileDetails:[File]!
并且您可以在段控件中索引更改时对数组进行排序
@IBAction func indexChanged(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
sortedFileDetails = allFileDetails.sorted(by: { $0.name < $1.name })
case 1:
sortedFileDetails = allFileDetails.sorted(by: { $0.size < $1.size })
case 2:
sortedFileDetails = allFileDetails.sorted(by: { $0.date < $1.date })
default:
break;
}
self.tableView.reloadData()
}
像这样更新您的 checkFileForExistence
方法。
func checkFileForExistence(){
let fileManager = FileManager.default
let documentsURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0]
do {
let fileURLs = try fileManager.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil)
print("file urls",fileURLs)
for files in fileURLs{
if files.absoluteString.contains(".mp4")||files.absoluteString.contains(".mov")||files.absoluteString.contains(".MOV")||files.absoluteString.contains(".m4a")
{
do {
//name
let fileName = (files.absoluteString as NSString).lastPathComponent
//size
let resources = try files.resourceValues(forKeys:[.fileSizeKey])
let fileSize = resources.fileSize!
let fileSizeValue = self.transformedValue(value: fileSize)
let fileSizeStr = String.init(format:"%@",fileSizeValue as! CVarArg)
//date
let fileCreatedDate = try files.resourceValues(forKeys:[.creationDateKey])
let dateCreated = fileCreatedDate.creationDate
self.allFileDetails = [File(name: fileName, size: fileSizeStr, date: dateCreated)]
} catch {
print("Error: \(error)")
}
}
}
} catch {
print("Error while enumerating files", (error.localizedDescription))
}
}
并在 numberOfRowsInSection
、cellForRowAt
方法中使用 sortedFileDetails.count
。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sortedFileDetails.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier:"mediaCell",for:IndexPath) as! MediaCustomCell
cell.itemLbl.text = sortedFileDetails[indexPath.row].name
cell.fileSizeLbl.text = sortedFileDetails[indexPath.row].size
cell.createdDateLbl.text = sortedFileDetails[indexPath.row].date.description
return cell
}
关于ios - 根据swift 4中排序的文本安排其余两个标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48700492/
我们有一个接口服务为下游的系统提供数据服务,本来好好的大家都愉快地传递JSON,非常和谐。可最近有个新需求去对接一个很老的系统,这倒是不算啥,可这个老系统数据不是以JSON传递的而是以XML传递
我想完成这样的事情: results = [] for i in range(N): data = generate_data_slowly() res = tasks.process
如何安排 SSIS 每天在给定时间从文件中自动执行包? 最佳答案 你有几个选择,但我会给你一些让你快速启动和运行的东西...... 打开 SQL Server Management Studio 并连
我们有两个服务器 Azure 配置,运行由 Umbraco 提供支持的网站。当我们需要向Azure服务器添加新域时,我们修改配置文件,然后依次重新启动每台服务器。 理论上,因为我们永远不会同时重新启动
我给出了一个创建电子邮件 C# 控制台应用程序的任务,该应用程序的目标是批量运行。我对 C# 领域非常陌生,因此我不知道我的方向。此 C# 控制台应用程序将部署在服务器上,并期望根据服务器时间在特定时
我有一个控制台应用程序,运行时会执行一些操作,并使用docker生成它的镜像。现在,我想将其部署到Kubernetes并每小时运行一次,是否有可能在K8中完成? 我已经阅读了有关Cron作业的信息,但
这是我的 CronJob 规范的一部分: kind: CronJob spec: schedule: #{service.schedule} 对于特定环境,设置了 cron 作业,但我从不希望
我的任务是创建一个应用程序,该应用程序将每 (n) 分钟向选定的收件人发送一封电子邮件。它所在的应用程序的结构方式是通过回调 .main(args) 来重置自身。每当需要的时候。我的问题是,当我调用.
安排 Airflow Dag 使其仅在工作日运行的正确方法是什么?我已经尝试在 start_date 和 schedule_interval 表达式中都包含小时偏移量,但它仍然没有在所需的时间开始。
我有许多测试都安排了一些 TestFixtures,我发现我正在复制该安排代码很多。每个测试的前几行几乎相同。 有没有一种方法可以在所有测试中声明一个共享的 TestFixture,同时仍然在每个测试
我有一个问题,我正在创建一个应用程序,我想在系统与 azan 时间匹配时在后台播放 azan 文件,无论用户正在使用应用程序的任何屏幕,azan 都应该开始播放。 我在 Azan.java 中创建了一
在我没有重启我的手机之前一直在 toast ,但是在重启之后 broadcastreceiver2 没有收到并且没有任何反应。 我关注了http://stacktips.com/tutorials/a
自动将一个数据库表的表数据复制到另一个数据库表;当表格更新或按某个特定时间间隔更新时,安排 数据库MySQL;语言 PHP 我有两个数据库; A和B 数据库 A 包含一个表 USERS 我想将USER
我的 Android 应用程序将定期轮询服务器以检查数据。我希望无论用户与应用程序交互如何进行此轮询,类似于(在概念上)Gmail 和 Google Reader 应用程序如何在后台同步数据。安装应用
我可以将android中的警报管理器(.set()方法)安排到当前时间一个月后的时间吗它会活那么久吗?操作系统对此 alarmManager 有何影响? 最佳答案 用户重启手机时的提示。您可以使用以下
安排 AsyncTask 每分钟运行一次的最佳做法是什么(请注意,在 AsyncTask 完成后我应该能够更新 UI)。 我不打算使用服务,因为这些任务应该只在应用处于 Activity 状态时运行。
我在排列从 php 中的 while 循环返回的数据时遇到问题。 基本上,我正在尝试从数据库返回工作的时间段计划,问题是我似乎在所有时间段中得到相同的结果,或者在一个时间段中的所有客户端得到相同的结果
我想创建一个仅在周六和周四运行的 mysql 事件。 是否可以定义事件本身的日期? 我有一个想法,每天运行调度程序,如果是星期四或星期六,则该过程将继续,否则它将退出调度程序而不执行任何操作。 最佳答
如何使用 MySQL 调度程序安排查询运行(如果这是最好的方法)?我按照 link here 中的说明进行操作但我有点迷路了。 我想在我们拥有的特定数据库上每 30 分钟运行一次以下查询。 u
我想在使用事件轮换我的日志后读取我的表日志,我希望我的事件在我选择的一周中的任何一天运行。 经过一番研究,我想到了这个 CREATE EVENT read_rotated_logs ON SCHEDU
我是一名优秀的程序员,十分优秀!