2016-04-19 3 views
1

Мне нужно удалить строку в разделе, но она удалит строку в верхней части. Пожалуйста, помогите найти проблемы с моими кодами. Также, пожалуйста, сообщите, как удалить раздел при удалении строки? В разделе есть одна строка.Как удалить строку в разделе с помощью Swift?

var sectionTitles = [String]() 
    var savedURLs = [[String]]() 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return savedURLs.count 
    } 

    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     return sectionTitles[section] 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return savedURLs[section].count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("SavingCell") 
     cell?.textLabel!.text = savedURLs[indexPath.section][indexPath.row] 
     return cell! 
    } 

    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {   
     if editingStyle == UITableViewCellEditingStyle.Delete { 
      savedURLs[indexPath.section].removeAtIndex(indexPath.row) 
      NSUserDefaults.standardUserDefaults().setObject(savedURLs, forKey: Key_SavedURLs) 
      savingTableView.reloadData() 
     } 
    } 
+0

Я не вижу проблем с вашим кодом. Мне кажется, что он должен работать так, как ожидалось. Не могли бы вы приложить несколько скриншотов, которые иллюстрируют проблему, с которой вы столкнулись? –

+0

Привет, Андрей, спасибо за ваш быстрый ответ. Это удивительно! Я снова проверил свое приложение, это проблема других кодов в приложении. Так что коды здесь прекрасны. Можете ли вы дать подсказку, как удалить раздел при удалении строки? В разделе есть только одна строка. – Mike

+0

уверен, напишу ответ через 2-3 минуты :) –

ответ

2

Для удаления пустых разделов изменить код для этого:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 

    if editingStyle == UITableViewCellEditingStyle.Delete { 

     savedURLs[indexPath.section].removeAtIndex(indexPath.row) 

     // now check if a section is empty and, if so, delete it 

     if savedURLs[indexPath.section].count == 0 { 
      savedURLs.removeAtIndex(indexPath.section) 
     } 

     NSUserDefaults.standardUserDefaults().setObject(savedURLs, forKey: Key_SavedURLs) 

     savingTableView.reloadData() 
    } 
} 

хотя для этого, чтобы работать ваш savedURLs должен быть [[String]]

+0

все сделано, все нормально. Двигаемся вперед. Хорошего дня! – Mike

+0

Есть ли особая причина, по которой вы используете reloadData, когда есть функция deleteSections в UITableView? Плавно анимированные переходы гораздо более профессиональны. –

+0

@GlennHowes извините за то, что заметил ваш комментарий только сейчас. Конечно, deleteRow - намного лучший способ. Причина, по которой я не включил его в свой первоначальный ответ, состоит в том, что он требует немного больше кода и не имеет прямого отношения к исходному вопросу (обработка пустых разделов) :) –

1
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 

    if editingStyle == UITableViewCellEditingStyle.Delete { 
     savedURLs.removeAtIndex(indexPath.section)  
     NSUserDefaults.standardUserDefaults().setObject(savedURLs, forKey: Key_SavedURLs) 

     savingTableView.reloadData() 
    } 
} 

попробовать this.this должен работать ..

+0

фахад, спасибо, тоже. Сначала Андрей отвечает, поэтому я выбрал его ответ. Твоя работа тоже. – Mike

Смежные вопросы