0

Я реализовал longPressGesture в своих пользовательских ячейках, и теперь мне нужно получить информацию, хранящуюся в этих ячейках.Swift - Получение информации, хранящейся в пользовательских табличных ячейках

Моя cellForRowAtIndexPath-функция выглядит следующим образом:

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

    let longPress: UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: "cellLongPressed:") 
    longPress.delegate = self 
    longPress.minimumPressDuration = 1 
    longPress.numberOfTouchesRequired = 1 

    let cellID = "cell" 
    var mcell:CusCell = self.tv.dequeueReusableCellWithIdentifier("cell") as CusCell 

    mcell.addGestureRecognizer(longPress) 

    let data = mainList[indexPath.row] as SecondModel 

    var dateStr:String = String() 
     dateStr = printDate(data.date) 

     mcell.mainLabel.text = data.receiver 
     mcell.recLabel.text = "Message sent at \(dateStr)" 
     mcell.imageLabel.image = UIImage(named: icons[0]) 
     mcell.messType = messageType 

возвращение mcell }

Моя didSelectRowAtIndexPath-функция выглядит следующим образом:

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

    let selectedCell: CusCell = tv.cellForRowAtIndexPath(indexPath) as CusCell 

    messagType = selectedCell.messType 

    println(messagType) 

} 

Мои cellLongPressed-функция выглядит следующим образом:

func cellLongPressed(gestureRecognizer:UIGestureRecognizer) { 

    if (gestureRecognizer.state == UIGestureRecognizerState.Ended) { 
     println("STATE ENDED") 
     //Do Whatever You want on End of Gesture 
    } 
    else if (gestureRecognizer.state == UIGestureRecognizerState.Began){ 
     println("STATE BEGAN") 
     //Do Whatever You want on Began of Gesture 
    } 
} 

Теперь, как вы, вероятно, можете догадаться, целое число, хранящееся в «selectedCell.messType», никогда не печатается. Я действительно не понимаю, почему это не должно работать, является ли мое объявление «selectedCell» неправильным?

Любые предложения будут оценены.

+1

Вы не показать, где 'messType' получает множество, и вы ничего с длинной пресс распознаванью не делаете. Можете ли вы добавить дополнительную информацию к вопросу, например, как и весь метод cellForRow? – jrturton

+4

Как общее предложение, не храните данные в ячейках. Ячейки отображают данные из вашей модели, они не должны использоваться для хранения вещей. – jrturton

+0

@jrturton Мои функции теперь добавлены, я надеюсь, что это станет более ясным. – martin

ответ

4

Почему вы не можете прочитать данные с модели, если messageType является частью модели? Чтение данных из ячейки не является хорошим способом сделать это.

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

    let data = mainList[indexPath.row] as SecondModel 
    var messagType = data.messageType 
    println(messagType) 

} 

Если его требуется регистрировать значения в длинных пресс-конференции

func cellLongPressed(gestureRecognizer:UIGestureRecognizer) { 

    if (gestureRecognizer.state == UIGestureRecognizerState.Ended) { 
     var point = gestureRecognizer.locationInView(self.tableView) 
     if let indexPath = self.tableView.indexPathForRowAtPoint(point) 
     { 
      let data = mainList[indexPath.row] as SecondModel 
      var messagType = data.messageType 
      println(messagType) 
     } 
    } 
    else if (gestureRecognizer.state == UIGestureRecognizerState.Began){ 

    } 
} 
+0

Пробовал это тоже, но до сих пор ничего не печатается. – martin

+0

Вы пытаетесь с длинной печатью? или нажмите? @ frank21 – rakeshbs

+0

Не следует ли печатать messagType, даже если он не реализован в функции cellLongPressed? – martin