- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 TableView 列表,其中有一个选择操作与之相关。当用户选择该行时,它会提示他们并开始下载文件并使用进度指示器显示进度。出于某种原因,指标从选择中每 12 条记录显示一次。为什么会这样……是我选择的单元格不正确吗?
这是我的代码:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = self.tableView.cellForRow(at: indexPath) as! downloadCell
let cellName = CurrentFiles[indexPath.row].labelName
let internalName = CurrentFiles[indexPath.row].internalName
let fileLocation = CurrentFiles[indexPath.row].fileName
let safeURL = fileLocation.addingPercentEncoding(withAllowedCharacters:NSCharacterSet.urlQueryAllowed)
let fileExtension = CurrentFiles[indexPath.row].fileExtension
let fileDate = CurrentFiles[indexPath.row].lastUpdate
if (cell.progressView.isHidden) && (cell.fileStatus == "Installed") && (cell.fileIcon.image == nil) {
let fileLoc = getSharedFilePath(appGroup:applicationGroup,sharedFilename:"\(internalName).\(fileExtension)")
let defaults = UserDefaults.standard
defaults.set(fileLoc, forKey: "loadmap")
defaults.set(cellName, forKey: "loadmapName")
performSegue(withIdentifier: "gotoMap", sender: self)
} else if (cell.progressView.isHidden) {
alertControllerMsg(msgStyle: UIAlertControllerStyle.alert,msgTitle: "Download File", msgBody: "Are you sure you want to download \(cellName)?", cancelLbl: "Cancel", actionLbl: "Download", complete: {
cell.fileStatus = "Installed" //prevent double download
//download file
let destination: (URL, HTTPURLResponse) -> (URL, DownloadRequest.DownloadOptions) = {
(temporaryURL, response) in
if let directoryURL = FileManager().containerURL(forSecurityApplicationGroupIdentifier: applicationGroup), let suggestedFilename = response.suggestedFilename {
let filePath = directoryURL.appendingPathComponent("\(suggestedFilename)")
return (filePath, [.removePreviousFile, .createIntermediateDirectories])
}
return (temporaryURL, [.removePreviousFile, .createIntermediateDirectories])
}
if self.reachability.isReachableViaWiFi {
cell.progressView.isHidden = false
//BackendAPI is used to allow for downloads in background
BackendAPIManager.sharedInstance.alamoFireManager.download(safeURL!, to: destination)
.downloadProgress { progress in
cell.fileIcon.image = nil
cell.progressView.setProgress(Float(progress.fractionCompleted), animated: true)
cell.pctLabel.text = "\(String(format:"%g",round(progress.fractionCompleted*100)))%"
}.response { response in
cell.pctLabel.text = nil
cell.progressView.isHidden = true
cell.additionalLbl.text = nil
UserDefaults(suiteName: applicationGroup)!.set(fileDate, forKey: internalName)
cell.fileStatus = "Installed"
self.getAvailSpace()
}
} else {
self.alertControllerMsg(msgStyle: UIAlertControllerStyle.alert,msgTitle: "Insufficient Network", msgBody: "Please connect to a Wifi network to download this file.", cancelLbl: "Cancel", actionLbl: "Retry", complete: {
self.downloadAndSort()
})
}
})
}
}
编辑:
CellforRowAt 代码
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "downloadCell", for: indexPath) as? downloadCell {
let currentFile = CurrentFiles[indexPath.row]
cell.configureCell(currentFile: currentFile)
return cell
} else {
return downloadCell()
}
}
编辑 2:
class downloadCell: UITableViewCell {
@IBOutlet weak var fileLbl: UILabel!
@IBOutlet weak var fileIcon: UIImageView!
@IBOutlet weak var pctLabel: UILabel!
@IBOutlet weak var additionalLbl: UILabel!
@IBOutlet weak var fileSize: UILabel!
@IBOutlet weak var progressView: UIProgressView!
var fileStatus = "NotInstalled"
func configureCell(currentFile: currentFiles) {
fileLbl.text = currentFile.labelName
fileSize.text = currentFile.fileSize
let internalName = currentFile.internalName
fileIcon.image = UIImage(named: "download")
additionalLbl.text = "Updated: \(convertDateFormatter(date: currentFile.lastUpdate))"
let fileExists = (readFromSharedFile(sharedFilename: internalName, fileExtension: currentFile.fileExtension))
if fileExists == "Success" {
//file has been downloaded on device
let lastUpdateDate = UserDefaults(suiteName: applicationGroup)!.string(forKey: internalName)
if lastUpdateDate != currentFile.lastUpdate {
fileIcon.image = UIImage(named: "download")
fileStatus = "NeedsUpdate"
} else {
fileIcon.image = nil
fileStatus = "Installed"
additionalLbl.text = nil
}
} else {
// not on device
fileStatus = "NotInstalled"
}
}
}
最佳答案
在我的 View Controller 上,我创建了一个新字典来保存我的文件名和默认为 0 的当前进度,以及一个数组来保存当前下载的文件
var downloadProg = [String: Double]()
var currentDownloadNames = [String]()
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "downloadCell", for: indexPath) as? downloadCell {
let currentFile = CurrentFiles[indexPath.row]
cell.configureCell(currentFile: currentFile)
if !(currentDownloadNames.contains(currentFile.labelName)) {
cell.progressView.isHidden = true
cell.pctLabel.isHidden = true
cell.fileIcon.isHidden = false
} else {
cell.fileIcon.isHidden = true
cell.progressView.isHidden = false
cell.pctLabel.isHidden = false
}
return cell
} else {
return downloadCell()
}
}
我现在在 .downloadProgress 中设置字典百分比
downloadProg[cellName] = progress.fractionCompleted
我修改了 downloadCell 以显示百分比:
let pct = downloadProg[currentFile.labelName]
if (progressView.isHidden == false){
progressView.setProgress(Float(pct!), animated: true)
pctLabel.text = "\(String(format:"%g",round(pct!*100)))%"
}
关于单选多行上的 Swift TableView ProgressView 指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42910471/
我刚刚编辑了现有的指标脚本之一,并向其添加了警报功能,而没有中断脚本的其他部分。然而,当我将修改后的脚本添加到图表中时,TradingView 立即重定向到原始脚本/指标。有谁知道这可能是什么问题吗?
我刚刚编辑了现有的指标脚本之一,并向其添加了警报功能,而没有中断脚本的其他部分。然而,当我将修改后的脚本添加到图表中时,TradingView 立即重定向到原始脚本/指标。有谁知道这可能是什么问题吗?
我对在我的 Silverlight 应用程序中包含一个“throbber”很感兴趣,但由于它是如此常见,我想下载一个或遵循一些简单的教程。你能推荐一个可以在这方面指导我的网站,或者可以提供一个供我下载
我正在使用 RAD Studio 4 C++ 构建器,并希望在我的数据源从数据库中获取数据时显示一个指示轮。我知道 FireMonkey 有一个 Indicator wheel 但 c++ build
我正在努力使用 Android ToggleButton,因为我试图更改绿色指示灯。在 Android SDK 文件夹中,我找到了文件 drawable\btn_toggle_bg.xml ,它说
如何在 Android 中显示 Activity 指示器?是否有任何 Android 库给定的方法?如果不是,请告诉我在 Android 中用于显示 Activity 指示器的技术? 最佳答案 And
在 Flutter我如何绘制边框半径选项卡指示器,如下图所示? 下面的代码只能绘制我在 github 中找到的圆形指示器. TabBar( isScrollable: true, contro
有没有办法获得相当于 _merge合并后的指标变量 dplyr ? 类似于 Pandas indicator = True选项基本上告诉你合并是如何进行的(每个数据集有多少匹配项等)。 这是 Pand
如何实现红色数字指示器(例如电子邮件计数通知)? 最佳答案 您正在寻找的是 applicationIconBadgeNumber 属性,它是 UIApplication 的属性。 要从应用中的任何位置
我目前正在为客户开发一个应用程序,他们提出了一个奇怪的请求。该请求涉及将自定义图像作为 ScrollView 的指示器。我什至不确定这是否可能,但如果可以,请让我知道如何做到这一点。 谢谢 最佳答案
有人知道 iPhone UISlider 控件有两个拇指的版本吗?我需要一个允许指定一系列值的控件。 UISlider API 文档暗示这对于标准控件来说是不可能的,所以我想知道是否有人对此有解决方案
我有一个 swing GUI 应用程序,其中包含一个框架类 MainFrame 和一个扩展 JPanel 的类 PanelPlan。我通过使用 BufferedReader 逐行读取文本文件并进行其他
我在 ember 路由中有一些模型。 model() { return this.get('store').query('orders', {}) } 我还有适配器,可以发送 ajax。 型号
我编写了一个程序来替换文件中的字符串。我在 C 中以 r+ 模式打开文件。现在一切正常,但是当程序替换字符串时,文件大小将减小,例如我有一个内容为 的文件 abcDEFgh 我想把DEF换成AA,就变
Currenlty 我在一个项目中工作,我必须从图库中选择多个图像,并且必须将所有选定的图像显示为可滑动 View (viewpager 指示器)。我已经看过很多示例,但在每个示例中我都找到了带有 v
我有一个数据类型为 JSON 的 AJAX 调用,当运行 AJAX 调用时,进度百分比显示在“console.log”中,但在完成上传文件之前达到百分比 100%在磁盘上。如何将百分比与流程的实际进度
我正在使用下面的代码。但当您旋转屏幕或重新运行应用程序时它会起作用。 pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeLis
我是 android 的新手。我需要在同步时显示 Activity 指示器。单击按钮时,我将重定向到新 Activity 。在这个新 Activity 中,我正在同步。我需要在单击按钮时显示 Acti
是否可以添加 Activity 指示器作为警报的一部分?我需要这个,因为很难在白色背景中显示警报 View 。请提出想法。 最佳答案 我实际上是在搜索进度对话框...加载指示器 + 消息......
UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0,
我是一名优秀的程序员,十分优秀!