1

У меня есть TableView с несколькими строками, я их выбора и добавления их в текст этикетки, когда я отменить выбор любого из строки я не могу удалить его из ярлыка ТекстВыбор и отмена выбора строки UITableView

Вот мой код:

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

     if tableView == categoryTable 
     { 
     let cell = self.categoryTable.dequeueReusableCellWithIdentifier("categoryCell") as! InquiryCategoryTableViewCell 

     let Category:CategoryDB = categoryData.objectAtIndex(indexPath.row) as! CategoryDB 
     print("Category = \(Category.category)") 

      cell.categoryName.text = "\(Category.category)" 
      cell.tintColor = color.UIColorFromRGB(0xCEEBFF) 
      categoryTable.allowsMultipleSelectionDuringEditing = true 
      categoryTable.setEditing(true, animated: false) 



     return cell 
     } 
} 

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

     if tableView == categoryTable 
     { 
      categoryList = categoryData[indexPath.row] as! CategoryDB 

      self.category_id = categoryList!.catg_id 



      print("Name = \(categoryList!.category)") 
      print("ID = \(self.category_id)") 
      categoryLabel.text! += "\(categoryList!.category), " 
     } 
} 

Вот что я получаю, как выход:

Я первый выбранный 3 строки он получил прилагаемую к Label.text и после того, как я отменить выбор строки Label.text остается таким же

Любой, кто может мне помочь в этом коде?

+0

вы хотите обновить метку, когда строка не выбран? –

+0

@UmairAfzal Yup –

+0

so call сделалDeselectRowAtIndexPath так же, как вы использовали didSelectRowAtIndexPath –

ответ

1

вы можете добавить флаг - hasSelected в CategoryDB

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
if tableView == categoryTable 
    { 
     categoryList = categoryData[indexPath.row] as! CategoryDB 

     categoryList!.hasSelected = true 

     refreshLabel() 
    } 

}

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
if tableView == categoryTable 
    { 
     categoryList = categoryData[indexPath.row] as! CategoryDB 

     categoryList!.hasSelected = false 

     refreshLabel() 
    } 

}

func refreshLabel(){ 
    var label = "" 
    for object in categoryData as! CategoryDB { 
     if(object.hasSelected){ 
      label += "\(categoryList!.category), " 
     } 
    } 
    categoryLabel.text! = label 

}

+0

он отлично работает Спасибо Спасибо, –

0

вам просто необходимо реализовать метод делегата от UITableView, как показано ниже

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
    // update your label here 
} 
1

Пожалуйста, используйте массив, чтобы сделать это. Объявить NSMutableArray в верхней

var arrSelectedTexts:NSMutableArray = [String]() 

Сейчас в

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     if(!arrSelectedTexts.containsObject(categoryList!.category)) 
      arrSelectedTexts.addObject(categoryList!.category) 

     //Now update your label using the objects of the array 

} 

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
     if(arrSelectedTexts.containsObject(categoryList!.category)) 
      arrSelectedTexts.removeObject(categoryList!.category) 

     //Now update your label using the objects of the array 
    } 
1

Первое удалить categoryTable.allowsMultipleSelectionDuringEditing = true из cellForRowAtIndexPath и добавить его в viewDidload, потому что cellForRowAtIndexPath manyn время, когда ваше повторное использование клеток поэтому нет необходимости устанавливать его, что много времени!

Теперь вы должны реализовать метод делегата didDeselectRowAtIndexPath.

В этом методе вы получите indexPath.row для строки, которая будет deSelect или unselect, от этого indexPath.row вы можете получить ваш объект из вашего массива, который необходимо удалить из строки, просматриваемые на этикетке.

Итак, в didDeselectRowAtIndexPath сначала конвертировать your label text to mutable array, затем удалить объект из этого массива, а затем преобразовать этот массив в строку снова и показать на этикетке!

2

Попробуйте это и его отлично работает для меня,

Рассмотрим этот образец переменные

let animals : [String] = ["Dog","Cat","Lion","Tiger","Cow","Buffalo","Horse"] 
var sampleArray = [String]() 
var samleLabel = UILabel() 

добавить эту функцию в вашем didSelectRowAtIndexPath

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
{ 
    let cell = tableView.cellForRowAtIndexPath(indexPath)! 
    cell.textLabel!.text = animals [indexPath.row] 

    if sampleArray.contains((cell.textLabel?.text)!) 
    { 
     sampleArray.removeAtIndex(indexPath.row) 
     print(sampleArray) 
     samleLabel.text = test().componentsJoinedByString(",") 
    } 
    else 
    { 
     sampleArray.append((cell.textLabel?.text)!) 
     print(sampleArray) 
     samleLabel.text = test().componentsJoinedByString(",") 
    } 
} 

func test()-> NSArray 
{ 
    print(sampleArray) 
    return sampleArray; 
}