我想創建一個應用程序來選擇/取消選擇tableView中的行,所有數據從coreData加載,當我選擇一個元素,允許我更新它在coreData反之亦然,重新加載視圖或reloadData後在tableView中選擇複選標記問題
一開始一切正常,我負荷coreData數據,顯示的tableView的所有項目,並檢查行,如果需要的cellForRowAtIndexPath
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell:UITableViewCell? = nil
let item = (arrayToDisplay[indexPath.section] as Array<NSManagedObject>)[indexPath.row]
cell = tableView.dequeueReusableCell(withIdentifier: "ShoppingCell")!
let lblName:UILabel = cell?.viewWithTag(101) as! UILabel
let attributedString = NSMutableAttributedString(string: (item.value(forKeyPath: "name") as! String?)!)
if(item.value(forKeyPath: "bought") as! Bool)
{
attributedString.addAttribute(NSStrikethroughStyleAttributeName, value: NSNumber(value: NSUnderlineStyle.styleSingle.rawValue), range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSStrikethroughColorAttributeName, value: UIColor.red, range: NSMakeRange(0, attributedString.length))
cell?.setSelected(true, animated: true) //set checkMark to active/checked status
}
lblName.attributedText = attributedString
return cell!
}
在這之前,我已經啓用editingStyle像下面
func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
return UITableViewCellEditingStyle(rawValue: 3)!
}
一切正常,當我加載第一次來看,當我選中或取消選中我CoreData 更新值和刷新我的tableView,我重新從coreData和的tableView數據viewDidAppear,所以每當我場景之間的切換會有刷新,使用新的數據
當我在我的tableView檢查的項目,我保存數據,更新我的課陣列,並reloadData顯示新的變化(包括文字刪除線)
和這裏是問題,無論何時我重新加載tableView,或切換標籤(在TabBar),並返回,謝ckmarks沒有正確檢查,我無法檢查它們,它們看起來像是在不到一秒鐘內被檢查和未檢查,
我檢查了也許我在代碼中有一些衝突,但一切都是正確的因爲所有的更新操作都coreData得當,
我從Maitrayee Ghosh在ObjC writen其次示例項目,您可以通過添加[的tableView reloadData]模擬了同樣的問題,以didSelectRowAtIndexPath方法像下面
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"user selected %@",[dataArray objectAtIndex:indexPath.row]);
[tableView reloadData];}
所以如何使用正確檢查複選標記狀態來刷新tableView內容改變狀態的能力,像Google Keep一樣複選框註釋
你有什麼用'UITableViewCellEditingStyle(rawValue:3)'?只能使用'.none','.delete'或'.insert'的有效值之一。其他任何事物都是無證的,並可能在未來破裂。 – rmaddy
'rawvalue:3' is .checkmark available via'cell?.accessoryType = .checkmark':/ – Godrix
這完全錯了。如果您想設置複選標記,請設置正確的配件類型。編輯樣式不能使用完全不相關的值。 – rmaddy