2015-03-18 2 views
2

Итак, я создаю приложение, используя вид таблицы. Проблема заключается в том, что удаленный доступ к удалению не отображается в симуляторе. Когда я пытаюсь пронести его влево, ничего не всплывает. Вот код для главного контроллера. Любая помощь будет оценена!Swift Удалить не работает/отображается в виде таблицы

import UIKit 

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

var tableView : UITableView? 

@IBOutlet weak var table: UITableView! 
// Table View where the goals are displayed 



override func viewDidLoad() { 
    super.viewDidLoad() 
navigationItem.title = "Goal List" 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
override func viewWillAppear(animated: Bool) { 

    table.reloadData() 



} 

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

    return goalMgr.goals.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell : UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell") 

    //Assinging the contents of our goal array into rows 
    cell.textLabel?.text = goalMgr.goals[indexPath.row].goal 
    cell.detailTextLabel?.text = goalMgr.goals[indexPath.row].time 
    return cell 


} 

func tableView(tableView: UITableView, 
    didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var detail:SecondVC = self.storyboard?.instantiateViewControllerWithIdentifier("SecondVC") as SecondVC 

    detail.cellGoal = goalMgr.goals[indexPath.row].goal 
    detail.cellTime = goalMgr.goals[indexPath.row].time 

    self.navigationController?.pushViewController(detail, animated: true) 

} 


func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { 
    return true 
} 


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

    if (editingStyle == UITableViewCellEditingStyle.Delete){ 

     goalMgr.removeGoal(indexPath.row) 
     table.reloadData() 

     } 

    } 

} 

Вот файл, в котором removeGoal функция создается

import UIKit 

var goalMgr:GoalManager = GoalManager() 

struct Goal{ 
var goal: String = "Goal" 
var time: String = "Time" 
} 

class GoalManager: NSObject { 

var goals = [Goal]() 
var persistentHelper: PersistentHelper = PersistentHelper() 

override init(){ 

    var tempGoals:NSArray = persistentHelper.list("Goal") 
    for res:AnyObject in tempGoals{ 
     goals.append(Goal(goal:res.valueForKey("goal")as String,time:res.valueForKey("time") as String)) 
    } 

} 

func addGoal(goal:String, time: String){ 

    var dicGoal: Dictionary<String, String> = Dictionary<String,String>() 
    dicGoal["goal"] = goal 
    dicGoal["time"] = time 

    if(persistentHelper.save("Goal", parameters: dicGoal)){ 
     goals.append(Goal(goal: goal, time: time)) 
    } 
} 


func removeGoal(index:Int){ 

    var value:String = goals[index].goal 

    if(persistentHelper.remove("Goal", key: "goal", value: value)){ 
     goals.removeAtIndex(index) 
    } 
}  

    } 
+0

Я также использую основные данные. – Amir

+0

Является ли ваш источник данных tableView и делегат установленным для себя? – Aaron

+0

Что это значит? – Amir

ответ

2

Ваш метод tableView:commitEditingStyle:forRowAtIndexPath кажется выключен. Похоже, что вы вставили метод ниже внутри него:

func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool 
{ 
    return true 
} 

Вы уже определили метод выше методом tableView:commitEditingStyle:forRowAtIndexPathtableView:canEditRowAtIndexPath.

Update

Вы говорите, что, когда вы проводите, кнопка удаления не отображается. Но содержимое ячейки вытолкнуто влево? Если это так, попробуйте это:

  1. Поверните устройство в тренажере (влево или вправо)
  2. Убедитесь, что вы можете видеть обе стороны ряда (разделитель должен быть полностью виден в поле зрения)
  3. Теперь, салфетки

Все, кажется, хорошо в вашем коде, так что я предполагаю, что кнопка удаления есть, но это просто вне поля зрения в портретном режиме. Он должен быть видимым в ландшафте, поэтому я предлагаю вышеупомянутые шаги.

Если вы видите кнопку удаления в ландшафтном режиме, вам необходимо настроить выравнивание вашего UITableView с автоматическим расположением.

+0

Это правда, спасибо за улов, я удалил дополнительный метод, но его все еще не работает – Amir

+0

Это сработало!Хахаха, что мне новичок, я пытаюсь найти решение часами. Большое спасибо – Amir

+0

@Amir Можете ли вы пометить мой ответ как принятый? – newmediafreak

0

Чтобы получить салфетки, чтобы работать, вы должны реализовать tableView:editingStyleForRowAtIndexPath:

В этой функции вы возвращаете стиль редактирования ваша строка поддерживает. Только если это реализовано, удалит работу, чтобы удалить работу. Итак, здесь возвращаем UITableViewCellEditingStyle.Delete.

Если вы хотите изменить текстовую метку в красной коробке, которая показывает на прикосновении, реализовать tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:

tableView:canEditRowAtIndexPath: только там, чтобы вы ветировать строки, которые поддерживают редактируются.

+0

Итак, я должен добавить эту строку кода в файл vc? FUNC Tableview (Tableview: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle { возвращение UITableViewCellEditingStyle.Delete } – Amir

+0

Да. Это выглядит правильно. Активация салфетки отключена от этого, осуществляемого делегатом. –

0

Еще одна вещь, которую нужно проверить, - проверить флажок «Взаимодействие с пользователем» для ячейки просмотра таблицы в Инспекторе атрибутов. Он проверяется по умолчанию, но если вы его не сняли, то в какой-то момент функция удаления салфетки для удаления не будет работать.

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