Нажатие на отдельную кнопку в кастомной ячейке

xcode
ios
swift

#1

В таблице три ячейки, в каждой из которых есть дополнительная кнопка, выполняющая конкретную задачу. Как присвоить такую кнопку к своей ячейке в которой находится? В ячейки инфа берется из массивов, для каждой ячейки свой элемент массива, так же и по нажатию на кнопку. те по нажатию на кнопку расположенную в одной из ячеек необходимо отображать инфу относящуюся именно к этой ячейке


#2

В классе вашей кастомной ячейки создайте экшн нажатия кнопки.
Как понимаю, вам по нажатию надо перейти на другую сцену? Тогда создаете в том же классе ячейки делегат, который будет вызыватся при нажатии на кнопку. Ваш вью контроллер будет confirms к нему (делегату), ну и в методе делегата уже реализуете переход.
Ну или можете в ячейку передавать ссылку на вью контроллер и тогда в классе ячейки делать переход.


#3

Ох… Запутался)) по нажатию на ячейку переходим на др контроллер, а по нажатию на кнопочку просто воспроизводится локальное видео к этой ячейке без переходов на др контроллер.


#4

А, ну так просто создать экшн в контроллере ячейки и реализовать проигрывание видео.


#5

Просто создав экш и нажимая на кнопку по нажатию на кнопки проигрывается одно видео, а нужно, чтобы у каждой кнопки свое
import UIKit
import AVKit
import AVFoundation

class BreathViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var playerVC = AVPlayerViewController()
var playerView = AVPlayer()

@IBOutlet weak var tableView: UITableView!

let video = ["1","2","3"]
let nameWorkout = ["Начало ", "Сдерживание ", "Усиление "]
let descriptionWorkout = ["Во время дыхания надуваем живот", "Во время дыхания не зыбывайте дышать животом", "Во время дыхания дишим животом"]

  override func viewDidLoad() {
    super.viewDidLoad()
    
      let videoString: String? = Bundle.main.path(forResource: video[???], ofType: ".mp4") // CЮДА НЕОБХОДИМО ПЕРЕДАТЬ ВИДЕО В ЗАВИСИМОСТИ ОТ ЯЧЕЙКИ
      if let url = videoString {
          let fileURL = NSURL(fileURLWithPath: url)
          playerView = AVPlayer(url: fileURL as URL)
          playerVC.player = playerView
     }
  }
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 3
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    let myCell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! BreathViewControllerCell
    
    myCell.nameWorkout.text = nameWorkout[indexPath.row]
    myCell.descriptionLabel.text = descriptionWorkout[indexPath.row]
    
    return myCell
}

@IBAction func videoButtonTapped(_ sender: UIButton) {
    
    self.present(playerVC, animated: true) {
        self.playerVC.player?.play()
    }
}

#6

Так, стоп. Видео проигрывается не в ячейке?
Было бы лучше, если бы я видел весь проект, а то теперь я уже запутался.


#7

Вот кусочек проекта https://yadi.sk/d/At_WodiR38Wqxz. Можешь глянуть еще ошибку в файле UIDevice, все работает но ошибка висит. Использую чтоб в пятых фонах текста поменьше отображалось, а в остальных полный текст. Спасибо


#8

Поправил код. На счет ошибки - вы имеете ввиду “will newer be executed” warning? Если так - он будет отображатся, если у вас не подключен телефон к компьютеру, т.к.

    if DEVICE_IS_SIMULATOR == true

Всегда будет true.


#9

Значит можно не исправлять и спокойно выкладывать в стор, на девайсе будет корректно? У меня просто айфона нет протестировать (( А за кнопку ОГРОМНОЕ СПАСИБО, очень помог !!!


#10

Да, можно. не за что)