Я понимаю, что есть несколько подобных вопросов к этому, и я действительно проверил их много. Тем не менее, те, которые я проверил, были либо на неправильном языке, либо не на том, что я искал, поэтому я задаю новый вопрос. Для справки, я использую XCode 7.3.1 в Swift 2.UITableView отстает при прокрутке
Есть одна особенность моего нового приложения iOS, которое будет искать в Интернете данные и отображать результаты, заполняя UITableView. Моя проблема в том, что он отображает изображения в каждой ячейке, что делает прокрутку очень раздражающей.
Мое идеальное решение состояло бы в том, чтобы иметь дисплей изображения по умолчанию, и, позволяя пользователю продолжать прокрутку, он будет загружен в фоновом режиме. Затем, как только он его получит, он заменит значение по умолчанию. Я видел несколько предыдущих ответов о том, как это сделать, но никто не работал для меня.
P.S. Если вы видите еще один вопрос, который решает эту проблему WITH SWIFT, опубликуйте URL-адрес, и я удалю его.
Вот код, я использую в настоящее время (с запаздыванием):
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // Creates each cell, by parsing through the data received from the Employees array which we returned from the database
if (Employees.count == 0)
{
let cell = self.ResultsTable.dequeueReusableCellWithIdentifier("NORESULT", forIndexPath: indexPath) as! TruckSearchNRTableViewCell
return cell
}
else {
let cell = self.ResultsTable.dequeueReusableCellWithIdentifier("RESULT", forIndexPath: indexPath) as! TruckSearchTableViewCell
cell.companyLabel.text = Employees[indexPath.row]["CompanyName"] as? String
cell.nameLabel.text = Employees[indexPath.row]["EmployeeName"] as? String
if let mobile = Employees[indexPath.row]["PhoneNumber"] as? String {
if (mobile == "")
{
cell.mobileLabel.hidden = true
cell.mobileTitle.hidden = true
} else {
cell.mobileTitle.hidden = false
cell.mobileLabel.hidden = false
}
let phonenumber = mobile.stringByReplacingOccurrencesOfString("[^0-9]", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range:nil);
cell.phoneNumber.text = phonenumber
}
cell.titleLabel.text = Employees[indexPath.row]["JobTitle"] as? String
cell.truckLabel.text = Employees[indexPath.row]["TruckNumber"] as? String
cell.supervisorLabel.text = Employees[indexPath.row]["SupervisorName"] as? String
if (Employees[indexPath.row]["Synced"] as? Int) == 0 {
turnRed(cell)
} else {
turnBlack(cell)
}
if let ePhoto = Employees[indexPath.row]["PicLocation"] as? String { // Save complete URL of picture location, and save it to the table
let url = NSURL(string: "https://exampleurl.com/\(ePhoto)")!
if let data = NSData(contentsOfURL: url){
let myImage = UIImage(data: data)
cell.employeePhoto.image = myImage
}
else
{
cell.employeePhoto.image = UIImage(named: "person-generic")
}
}
return cell
}
}
Пожалуйста, обратите внимание на [это] (http://stackoverflow.com/ a/26147814/1611876). Это в ObjC, но перевод его на Swift должен быть тривиальной задачей. Также вы хотели бы иметь механизм кеша, чтобы избежать загрузки каждого изображения каждый раз. [SDWebImage] (https://github.com/rs/SDWebImage) - это хорошее решение для того, чего вы хотите достичь, и вы будете готовы к использованию ** background downloading/caching/placeholder image **. – vhristoskov
Я посмотрю, когда я получу шанс, спасибо! –