2016-09-28 1 views
0

Я создал ячейку прототипа tableview в раскадровке, и я добавил кнопку в ячейку и установил ее тег в indexpath.row. Когда я просматриваю свои ячейки, прокрученная ячейка в верхней части таблицы всегда устанавливает тег равным нулю вместо правильного тега.Передача тега указателя индекса на кнопку внутри ячейки прототипа в tableview

public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("autoLoadReuseIndentifier", forIndexPath: indexPath) 

     print("indexpath :\(indexPath.row)") 


     cell.contentView.viewWithTag(100)?.layer.cornerRadius = 5 
     tableView.separatorStyle = UITableViewCellSeparatorStyle.None 
     let tempDict : NSDictionary = savedCardsArray.objectAtIndex(indexPath.row) as! NSDictionary 


     let bankName = cell.contentView.viewWithTag(102) as! UILabel 

     deleteButton = cell.contentView.viewWithTag(106) as? UIButton 
     deleteButton?.tag = indexPath.row 
     deleteButton?.addTarget(self, action: "deleteCard1:", forControlEvents: UIControlEvents.TouchUpInside) 
     print("delete button:\(deleteButton)") 
     // print("indexpath delete tag :\(deleteButton.tag)") 
     if(self.isSetUpAutoloadSelected){ 
      deleteButton?.hidden = true 
     }else{ 
      deleteButton?.hidden = false 
     } 
     return cell; 
    } 

Всякий раз, когда я прокручиваю ячейки, тег кнопки тега всегда устанавливается на ноль.

+0

какой вид имеет бирку 100, 102 и 106. имя каждого вида пожалуйста. –

+0

Показать журнал 'print (" delete button: \ (deleteButton) ")' –

+1

Повторить после меня «Не используйте теги, они хрупкие, они вызовут у меня больше проблем, чем они решат». Используйте соответствующие подклассы 'UITableViewCell' со свойствами для ссылки на ваши представления. Используйте протокол и делегацию, чтобы получать события кнопок из ячеек обратно в контроллер просмотра. Попросите камеру передать себя делегату, чтобы контроллер представления мог идентифицировать строку – Paulw11

ответ

0
  1. Я думаю, что вам не нужно следовать этому подходу, потому что во-первых, установить кнопку тег статически в раскадровке и снова вы изменить это тег в cellforrowatindexpath так, когда вы перечисляете, ячейка не будет найти кнопку с тегом 106. Если вы хотите следовать этому подходу, вам нужно создать customButton и добавить Variable типа NSInteger или что угодно и сохранить indexpath.row в эту переменную customButton.

  2. Другой подход является создание CustomTableViewCell класса и создать выход кнопку в этом пользовательские сотовый класса и установить indexpath.row в кнопку теге как этот

    CustomCellClassObject.buttonName.tag = indexPath.row

1

Если вам нужно пойти другим путем, используйте код и получите indexPath.

func deleteCard1(_ sender:deleteCard) { 
    let buttonPosition:CGPoint = sender.convert(CGPointZero, to:self.tableView) 
    let indexPath = self.tableView.indexPathForRow(at: buttonPosition) 
} 
0

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

Кроме того, вам не нужно создавать переменную deleteButton, поскольку я не вижу правильной цели.

Назначьте тег кнопке и добавьте цель в cellForRowAtIndexPath, она должна работать нормально.