2015-12-27 4 views
0

Я пытаюсь получить textLabels всех выбранных строк, но я не знаю, как это сделать, но не получал от этого никакой помощи, поэтому я попытался что-то сделать на моем но я не работаю так, как хочу, я думал, что создание массива и сортировка textLabels выбранных ячеек будут работать для него (да, его работа отлично), но когда я отменю выделение ячейки, я хочу удалить textLabel этой конкретной ячейки из моего массив, если кто-нибудь знает, как сделать это, то пожалуйста скажите мнеОбработка нескольких выбранных строк в UItableView

вот мой код -

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

    let cell = tableView.cellForRowAtIndexPath(indexPath) 

    if (cell?.accessoryType == UITableViewCellAccessoryType.Checkmark){ 

     cell!.accessoryType = UITableViewCellAccessoryType.None; 
     getTheChannelNames.removeAtIndex(getTheChannelNames.count - 1) 



     print(getTheChannelNames.count) 
      print(getTheChannelNames) 



    }else{ 
     cell!.accessoryType = UITableViewCellAccessoryType.Checkmark; 
     _ = self.ChannelList[indexPath.row] 

     if (cell?.accessoryType == UITableViewCellAccessoryType.Checkmark){ 


       getTheChannelNames.append((cell?.textLabel?.text)!) 
      print(getTheChannelNames.count) 
       print(getTheChannelNames) 
     } 


    } 
} 
+3

Скорее, сохраняя текст, вы должны просто сохранить набор выбранных строк - текст, который вы легко можете получить из своей модели данных. Вы можете использовать 'NSMutableIndexSet' для хранения состояния выбора – Paulw11

+0

в порядке, поэтому' NSMutablwIndexSet' - это то, что мне нужно для получения нескольких значений? спасибо за ответ :) –

+1

Это хорошая структура данных, используемая для хранения указателей (строк), и вы можете быстро проверить, установлен ли данный индекс в наборе; В 'didSelectRowAtIndexPath' вы можете проверить, уже ли строка в наборе; если он не добавляет его, если он его удаляет. В 'cellForRowAtIndexPath' вы можете проверить набор, чтобы увидеть, нужно ли добавлять или удалять галочку – Paulw11

ответ

0

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

var selectedTextLabels = [NSIndexPath: String]() 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let cell = tableView.cellForRowAtIndexPath(indexPath)! 
    cell.accessoryType = .Checkmark 
    if let text = cell.textLabel?.text { 
     selectedTextLabels[indexPath] = text 
    } 
} 

override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
    let cell = tableView.cellForRowAtIndexPath(indexPath)! 
    cell.accessoryType = .None 
    selectedTextLabels[indexPath] = nil 
} 

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

Второе решение представляет собой метод, который возвращает все выбранные текстовые метки:

func selectedTextLabels() -> [String]? { 
    return self.tableView.indexPathsForSelectedRows?.flatMap { 
     let cell = tableView.cellForRowAtIndexPath($0)! 
     return cell.textLabel?.text 
    } 
} 

Он принимает все выбранные индексные пути и получает текстовые метки для каждого из них.

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