小弟在編寫復選列表(用tableview 的每一個 cell 裝每一個選項)時遇到刷新問題,點擊刷新後,被選中的文件若上傳成功,則在列表中不再顯示,但是上傳成功後刷新列表,原本存在的被選中的cell(用image標識)中的image下移到另一個cell中了。求大神幫我解決這個問題!!!!
或者求大神提供一個“復選列表”帶自動刷新的可行方法!求大神幫忙小弟度過這個緊急時刻!
好吧,最後我解決了這個問題,方案如下:
1.設置一個全局變量flag,當做刷新的標志位,
2.確定總共上傳x個文件,把標志位置成x,每上傳成功一次,標志位自減1;
3因為 tableview?.reloadData() 時,有多少個cell,便會調用多少次 tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell ,所以 每加載一個cell時都可判斷一下 if(flag >=0){把cell的“button圖片” —> “未選中button圖片”,flag--;}else{flag = -1}
4.其余時候下的刷新(比如說下拉刷新)flag < 0, 並不會更新每個cell中button的圖片。
5.如果我解釋的不清楚,或者有什麼更好的方式,請聯系我!
部分代碼如下:(有很多函數都是自己寫的,看起來比較亂,請見諒 )
/*上傳*/
func uploadClicked(){
prepareForUpload()
uploadAudioAndImage(uploadAudioID, ID : ID , insuranceID: insuranceID, idataIcard: idataIcard, userCode: userCode)
uploadVideo(uploadVideoID, ID : ID , insuranceID: insuranceID, idataIcard: idataIcard, userCode: userCode)
timer = NSTimer.scheduledTimerWithTimeInterval(1,
target:self,selector:Selector("tickDown"),
userInfo:nil,repeats:true)
upload.enabled = false
upload.setTitle("正在上傳", forState: UIControlState.Normal)
coverView = UIView(frame: CGRectMake(0, 130, self.view.frame.size.width, self.view.frame.size.height))
coverView!.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.1)
self.view!.addSubview(coverView!)
}
/*輪詢是否上傳完成*/
func tickDown(){
let defaults = NSUserDefaults.standardUserDefaults()
let temp = defaults.integerForKey("temp_done")
if(temp == 0){
upload.enabled = true
upload.setTitle("上傳資料", forState: UIControlState.Normal)
coverView?.removeFromSuperview()
rfClick()
timer.invalidate()
}
}
/*上傳完成後,刷新頁面*/
func rfClick(){
audioID = searchAudioID(insuranceID)
videoID = searchVideoID(insuranceID)
//maintableview?.reloadData()
dispatch_async(dispatch_get_main_queue(), {
self.flag = self.audioID.count + self.videoID.count
self.maintableview?.reloadData()
})
}
//flag 為全局變量,常態時置成 -1(上傳完成,flag置成 -1)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:(UITableViewCell) = UITableViewCell(style:.Default,reuseIdentifier:"Identifier") as UITableViewCell
if(indexPath.section==0){
let cell:audioCheckboxTableViewCell = maintableview!.dequeueReusableCellWithIdentifier("audioCheckboxTableViewCell", forIndexPath: indexPath) as! audioCheckboxTableViewCell
cell.audioName.text = (audioID[indexPath.row]["audio_id"]as? String)!
cell.tag = 0
if flag > 0
{
flag--
cell.butSelect.setImage(UIImage(named: "fx_02"), forState: UIControlState.Normal)
}else{flag = -1}
cell.textLabel!.font = UIFont.systemFontOfSize(14)
cell.selectionStyle = UITableViewCellSelectionStyle.None
return cell
}
if(indexPath.section==1){
let cell:videoCheckboxTableViewCell = maintableview!.dequeueReusableCellWithIdentifier("videoCheckboxTableViewCell", forIndexPath: indexPath) as! videoCheckboxTableViewCell
cell.videoName.text = (videoID[indexPath.row]["VIDEO_ID"]as? String)!
cell.tag = 1
if flag > 0
{
flag--
cell.butSelect.setImage(UIImage(named: "fx_02"), forState: UIControlState.Normal)
}else{flag = -1}
//cell向右箭頭
cell.accessoryType = UITableViewCellAccessoryType.None
cell.textLabel!.font = UIFont.systemFontOfSize(14)
cell.selectionStyle = UITableViewCellSelectionStyle.None
return cell
}
//cell向右選擇箭頭
cell.accessoryType = UITableViewCellAccessoryType.None
cell.textLabel!.font = UIFont.systemFontOfSize(14)
cell.selectionStyle = UITableViewCellSelectionStyle.None
return cell
}