Swift TableView Cell - 显示活动微调器,执行功能,隐藏活动微调器
Posted
技术标签:
【中文标题】Swift TableView Cell - 显示活动微调器,执行功能,隐藏活动微调器【英文标题】:Swift TableView Cell - Show Activity Spinner, Perform Function, Hide Activity Spinner 【发布时间】:2016-04-30 07:09:18 【问题描述】:我正在 Swift 中构建一个显示 UITableView 单元列表的应用程序。当用户点击一个单元格时,我希望按顺序执行以下操作:
-
取消选择索引路径处的行
显示 UIActivitySpinner 并为其设置动画
执行一项功能(大约持续 10 秒)
隐藏 UIActivitySpinner
我目前的代码如下:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
let cell = tableView.cellForRowAtIndexPath(indexPath) as! TableViewCell
cell.ActivitySpinner.startAnimating()
myFunction() // Approximately 10 seconds.
cell.ActivitySpinner.stopAnimating()
return
所以这个想法是 UIActivitySpinner 将在 myFunction() 执行时出现 10 秒,并在 myFunction() 完成时消失。
当前的问题是 UIActivitySpinner 仅在 myFunction() 完成执行后出现。我不确定如何让 ActivitySpinner 在 myFunction() 开始之前出现,并在 myFunction() 完成后消失。
关于 myFunction():它是一个 C 函数,链接在桥接头中,主要是 HTTP 请求。
【问题讨论】:
【参考方案1】:首先,使用大写属性的第一个字母通常不是最佳做法。
如果您制作像网络调用这样的异步线程,那么下面这不是最好的解决方案。 你可以使用这个功能(我不推荐这个):
func dispatchDelay(delay:Double, closure:()->())
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
.. 然后做:
cell.ActivitySpinner.startAnimating()
myFunction() // Approximately 10 seconds.
dispatchDelay(10.0)
cell.ActivitySpinner.stopAnimating()
这是我给你的建议:
你必须像这个例子一样将完成处理程序添加到你的 C 函数中:
void myFunction(std::string urlStr, std::function<void(std::string)> callback)
...
NSURLSessionDataTask* dataTask =
[defaultSession
dataTaskWithURL:url
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error)
if(error == nil)
NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"Data = %@",text);
// invoke the callback here...
callback(std::string([text UTF8String]));
];
...
在 C 中你可以像这样使用它:
void callbackFunc(std::string data)
...
myFunction("...", callbackFunc);
你现在需要构建的是一个跨平台的 C -> Swift,如果你不知道,你可以按照这些指令“Building cross platform aint easy”:这可以让你将回调集成到你的 swift 代码中来处理确切的 myFunction 开始时间和结束时间。
【讨论】:
非常感谢,这是很大的帮助。完成处理程序是否适用于 Obj C BOOL 函数? 当然,您可以将 c 函数包装到 obj c 并将其桥接到 swift,这在答案“Building cross..”中的链接中有详细说明以上是关于Swift TableView Cell - 显示活动微调器,执行功能,隐藏活动微调器的主要内容,如果未能解决你的问题,请参考以下文章
Swift TableView Cell - 显示活动微调器,执行功能,隐藏活动微调器
没有情节提要的 TableView Cell 的 iOS Swift Segue
如何在tableView swift的Xib Cell中创建内部视图动态
swift TableView Cell Dequeue Trick