2016-04-10 2 views
3

Я недавно начал изучать развитие iOS, и у меня возникли проблемы.Как показать пользовательский вид в UITableviewCell при нажатии кнопки?

У меня есть табличное представление с пользовательской ячейкой: ярлык, изображение (скрыто по умолчанию) и кнопка. Я хочу, чтобы он работал так, чтобы при нажатии кнопки на ячейку показывалось изображение. Проблема заключается в том, что каждый раз, когда ячейка повторно используется, изображение отображается для повторно используемой ячейки. Я хочу заставить его работать так, чтобы, если кнопка нажата для первой ячейки, ТОЛЬКО отображается первое изображение изображения ячеек. Если нажать кнопку для первой и третьей ячейки, изображение должно показать ТОЛЬКО для первой и третьей строки, а не для любой другой строки.

Мое текущее решение:

class CustomTableViewCell: UITableViewCell { 

    @IBOutlet var cellTitleLabel: UILabel! 
    @IBOutlet var cellImageView: UIImageView! 
    var showImageView = false 


    @IBAction func showImageViewAction(sender: UIButton) { 
     showImageView = true 
     displayCell() 
    } 

    func displayCell() { 
     if showImageView { 
      cellImageView.hidden = false 
     } else { 
      cellImageView.hidden = true 
     } 
    } 
} 

И для контроллера представления:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 30 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath) as! CustomTableViewCell 

    return cell 
} 

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    let customCell = cell as! CustomTableViewCell 
    customCell.displayCell() 
} 

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

+0

Так что, когда вы нажмете на кнопку, вид изображения показывает на все 30 клетки? –

+0

Нет. В настоящее время, если я нажимаю кнопку для первой ячейки, изображение отображается для следующих ячеек: 1, 6, 11, 16, 21 и 26. Я предполагаю, что это потому, что ячейки 6, 11, 16, 21 и 26 повторно использует ячейку 1 при вызове dequeueReusableCellWithIdentifier – user3489053

+0

. Вы можете сначала получить конкретную ячейку [indexPath.row], а затем спрятать изображение для этой ячейки? –

ответ

1

, если у вас есть, чтобы сохранить cellImageview.hidden статус просто сделать так:

добавить протокол информировать MainClass, что actionButton нажата:

protocol customCellDelegate{ 
    func actionButtonDidPressed(tag: Int, value: Bool) 
} 

чем в вашем CustomTableViewCell объявить

var delegate: customCellDelegate? 

и в @IBAction func showImageViewAction(sender: UIButton) добавить:

@IBAction func showImageViewAction(sender: UIButton) { 
    cellImageView.hidden = ! cellImageView.hidden 
    delegate?.actionButtonDidPressed(self.tag, value: imageCell.hidden) 
} 

в вашем MainView чтобы он соответствовал customCellDelegate

var status = [Bool]() 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    let rowCount = 100 
    for _ in 0 ..< rowCount{ 
     status.append(true) 
    } 
    return rowCount 
} 


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! customcell 
    cell. cellImageView.hidden = true 
    cell. cellImageView.hidden = status[indexPath.row] 
    cell.delegate = self 
    cell.tag = indexPath.row 

    return cell 
} 

func actionButtonDidPressed(tag: Int, value: Bool) { 
    status[tag] = value 
} 
+0

Но в этом случае, когда я просматриваю до конца представления таблицы и затем прокручиваю назад, состояние просмотра изображения не сохраняется. Поэтому он снова скрывается. Мне нужно сохранить статус изображения для ячейки. – user3489053

+0

Я обновил сообщение с помощью рабочего (протестированного) кода, дайте мне знать, если вам нужно что-то еще –

+0

Спасибо. Это работает как шарм. Даже лучше, чем мое текущее решение с использованием обратных вызовов. – user3489053

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