2016-11-13 57 views
0

我已經用Swift 3構建了一個簡單的toDoList應用程序。現在我希望能夠通過從右向左滑動來從TableView中刪除我的項目。這段代碼就是我發現的。但是什麼都沒有發生在我向左滑動時。桌面視圖:從右到左刷卡刪除不顯示 - swift 3


CODE:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 

    return toDoList.count 
} 

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 
    return true 
} 

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell { 

    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell") 

    cell.textLabel?.text = toDoList[indexPath.row] 

    return cell 
} 



// 
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
    if (editingStyle == .delete) { 
     toDoList.remove(at: indexPath.row) 

     UserDefaults.standard.set(toDoList, forKey: "toDoList") 
     tableView.reloadData() 
    } 
} 

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle { 
    return .delete 
} 

這仍然無法正常工作。 當我向左滑動時,沒有任何反應。待辦事項列表本身正在工作。我可以將項目添加到表格中,但我無法刪除它們。

謝謝:)

+0

實施canEditRowAtIndexPath – ELKA

+1

您需要通過修復發佈的代碼來更新您的問題。代碼的開頭是沒有意義的。 – rmaddy

+0

嘗試檢查是否有任何消耗滑動事件的手勢識別器。 (你的應用中是否有滑動菜單?)。如果你能更新你的代碼,它會更好。 – ELKA

回答

1

你實現tableView:canEditRowAtIndexPath:方法?

P.S:斯威夫特3.

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 
    return true 
} 

編輯:

感謝@rmaddy爲mintioning說的tableView:canEditRowAtIndexPath:默認值是true,實現它並沒有解決問題。

我不是很肯定的什麼是你想從您的代碼段做的,所以請確保您要實現以下方法(UITableViewDelegate):

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
    if (editingStyle == .delete) { 
     toDoList.remove(at: indexPath.row) 

     UserDefaults.standard.set(toDoList, forKey: "toDoList") 
     tableView.reloadData() 
    } 
} 

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle { 
    return .delete 
} 

您也可以保留執行tableView:canEditRowAtIndexPath:方法:

要求數據源驗證給定的行是可編輯的。

所以 - 因爲示例 - 如果你想讓第一行是不可編輯的,即用戶無法刷卡和刪除的第一行,你應該做財產以後這樣的:

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 
    if indexPath.row == 0 { 
     return false 
    } 

    return true 
} 

此外,請確保UITableViewDataSourceUITableViewDelegate與ViewController連接。

希望這有助於。

+1

如果你沒有實現這個委託方法,它默認爲'true',所以這不成問題。 – rmaddy

+0

UITableViewDataSource和UITableViewDelegate已連接。我實現了editingStyleForRowAt indexPath函數。仍然不起作用。 – moritz