2015-10-10 1 views
0

У меня есть табличный вид с тремя разделами (Services, Availability and Days) и несколькими строками в каждом из них. Я применил a, чтобы увидеть галочку, когда вы выбираете любую строку. Теперь я хочу снова увидеть выбранные строки, когда вы снова показываете таблицу после того, как я уволил ее в первый раз. Как показано историю выбранных элементов.См. Также галочку после отклонения таблицыView в swift

здесь код, чтобы показать пометку:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let indPath = indexPath 
    let section = indPath.section 
    switch section { 
    case 0: 
     updateCell(indPath, select: true) 
    case 1: 
     updateCell(indPath, select: true) 
    case 2: 
     updateCell(indPath, select: true) 
    default: 
     Void() 
    } 
} 

override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
    let indPath = indexPath 
    let section = indPath.section 
    switch section { 
    case 0: 
     updateCell(indPath, select: false) 
    case 1: 
     updateCell(indPath, select: false) 
    case 2: 
     updateCell(indPath, select: false) 
    default: 
     Void() 
    } 
} 

func updateCell(indexpath: NSIndexPath, select: Bool) { 
    if let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: indexpath.row, inSection: indexpath.section)) { 
     if select{ 
      cell.accessoryType = .Checkmark 
     } 
     else { 
      cell.accessoryType = .None 
     } 
    }//end if cell 

Теперь здесь метод, где я получаю данные из выбранных строк:

func save(){ 
    if let indexPaths = self.tableView.indexPathsForSelectedRows{ 
     for indexPath in indexPaths{ 
      switch indexPath.section{ 
      case SectionIndex.Services.rawValue: 
       switch indexPath.row{ 
       case ServicesIndex.Recieve.rawValue: 
        selectedServices.insert("RECEIVE") 
       case ServicesIndex.Send.rawValue: 
        selectedServices.insert("SEND") 
       default: 
        Void() 
       }//end switch 
      case SectionIndex.Availability.rawValue: 
       switch indexPath.row{ 
       case AvailabiltiyIndex.Morning.rawValue: 
        selectedAvailabilities.append(6.0...9.0) 
       case AvailabiltiyIndex.Regular.rawValue : 
        selectedAvailabilities.append(9.0...18.0) 
       case AvailabiltiyIndex.Evening.rawValue: 
        selectedAvailabilities.append(18.0...21.0) 
       default: 
        Void() 
       }//end switch 
      case SectionIndex.Days.rawValue: 
       switch indexPath.row{ 
       case DaysIndex.Sunday.rawValue: 
        selectedDays.insert("Sunday") 
       case DaysIndex.Monday.rawValue: 
        selectedDays.insert("Monday") 
       case DaysIndex.Tuesday.rawValue: 
        selectedDays.insert("Tuesday") 
       case DaysIndex.Wednesday.rawValue: 
        selectedDays.insert("Wednesday") 
       case DaysIndex.Thursday.rawValue: 
        selectedDays.insert("Thursday") 
       case DaysIndex.Friday.rawValue: 
        selectedDays.insert("Friday") 
       case DaysIndex.Saturday.rawValue: 
        selectedDays.insert("Saturday") 
       default: 
        Void() 
       }//end switch 
      default: 
       Void() 
      }//end switch 
     }//end for 
    }//end If 
}//end save 

ответ

0

Сам выбор состояния теряется после табличный вид отклоняется. Не заботясь об этом, это лишь часть государства, с которым руководствуются взгляды.

В вашем методе save вы сохраняете «состояние выбора». У вас есть эти selectedServices, selectedAvailabilities и selectedDays переменных, в которых вы сохраняете состояние выбора. Если у вас все еще есть их, когда вы показываете представление таблицы во второй раз, вы можете вывести из них состояние выбора.

Вероятно, вы измените updateCell вызовы от:

updateCell(indPath, select: false) 

к этому:

updateCell(indPath, select: selectionState(indPath)) 

и определить метод, как это: (обратите внимание на selectedServices.contains("RECEIVE"))

func selectionState(indexpath: NSIndexPath) -> Bool { 
    let indPath = indexPath 
    let section = indPath.section 
    switch section { 
    case 0: 
     switch indexPath.row{ 
      case ServicesIndex.Recieve.rawValue: 
       return selectedServices.contains("RECEIVE") 
      ... 
    case 1: 
     updateCell(indPath, select: false) 
    case 2: 
     updateCell(indPath, select: false) 
    default: 
     Void() 
    } 
} 

contains метод фактически вытягивает состояние выбора из модели данных (которая эти случаи ссылаются на selectedServices и т. д.). Если невозможно реализовать метод contains, возможно, вам придется создать структуру данных, которая сохраняет только состояние выбора. Затем вы читаете состояние выбора из этой структуры данных и записываете состояние выбора в структуру данных и в экземпляры selectedServices и т. Д.

+0

Thx для вас помощь. Фактически после отклонения вида таблицы все выбранные данные не сохраняются. Таким образом, в основном то, что у меня есть, является видом карты и кнопкой фильтра, когда я нажимаю кнопку фильтра, перейдите к рассмотренному выше описанию таблицы фильтров. Мне нужно, чтобы после выбора пользователем параметров фильтра, которые ему нужны, он должен был видеть, что он выбрал, когда он возвращается к просмотру таблицы фильтров. Я новичок в быстрой и IOS. Я не уверен, как сохранить то, что выбрал пользователь, и как его вернуть. :) –

+0

У вас есть контроллер вида (VC), который используется для отображения вида таблицы фильтров (FVC). В VC сохраняется структура данных, в которой сохраняется состояние выбора. Передайте его в FVC, используя 'prepareForSegue' (google it). Затем вы можете обновить структуру данных во время FVC, и она снова появится там, когда вы снова откроете FVC. Структура данных может быть массивом (разделами) словарей (строк), где значения Bools (true/false = selected/not selected). –

+0

Спасибо! Я решил это с помощью метода делегата –

0

Я добавил метод делегата, в моем фильтре я добавил следующее:

protocol FilterSettingsDelegate:class{ 
    func filtercontrollerWillDissmiss(data: Set<NSIndexPath>) 
} 

class FilterTableViewController: UITableViewController { 

    weak var delegate: FilterSettingsDelegate? 
    var filterSettings : Set<NSIndexPath>? = [] 
... 


override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    self.filterSettings!.insert(indexPath) 

    let indPath = indexPath 
    let section = indPath.section 
    switch section { 
    case 0: 
     updateCell(indPath, select: true) 
    .... 

override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
    if self.filterSettings != nil { 
     self.filterSettings!.remove(indexPath) 
    } 
    let indPath = indexPath 
    let section = indPath.section 
    switch section { 
    case 0: 
    .... 

На мой взгляд, на карте я добавил следующее:

class SearchViewController: UIViewController, UISearchBarDelegate, FilterSettingsDelegate { 

var filterSettings : Set<NSIndexPath>? 

.... 

//Delegate Method 
func filtercontrollerWillDissmiss(data: Set<NSIndexPath>) { 
    self.filterSettings = data 
} 

//Then pass the data in the segue 

case "FilterSegue" : 
      let navController = segue.destinationViewController as! UINavigationController 
      if let controller = navController.topViewController as? FilterTableViewController{ 
       if self.filterSettings != nil{ 
        controller.filterSettings = self.filterSettings 
       } 
       controller.delegate = self 
      } 
Смежные вопросы