Вы можете использовать уведомления, как указано в комментариях, но я бы сделал кое-что еще.
1. В вашем пользовательском классе я бы добавил свойство с именем parentVC
типа UIViewController
:
class YourTableViewCell: UITableViewCell {
var parentVC: UIViewController!
...
}
2. Затем, когда вы удаляете ячейку из очереди, я бы установил для parentVC
ячейки self
, например, так:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "YourCellIdentifier") as! YourTableViewCell
//`self` is the view controller that the cell's table view is held in
cell.parentVC = self
return cell
}
3. Наконец, когда ваша пользовательская ячейканажата кнопка, просто представьте контроллер оповещений из parentVC
:
class YourTableViewCell: UITableViewCell {
var parentVC: UIViewController!
@IBAction func customButtonPressed(_ sender: Any) {
let alertController = UIAlertController(title: "Your alert title.", message: "Your alert message.", preferredStyle: .alert)
parentVC.present(alertController, animated: true, completion: nil)
}
...
}
Еще один вариант (в соответствии с предложением rmaddy)
Вы можете просто изменить кнопку вваш UITableViewCell
для рекурсивной проверки следующего респондента, пока он не будет иметь тип UIViewController
.
Сначала добавьте следующее расширение к UIView
. Это найдет родительский контроллер представления UIView
:
extension UIView {
var parentViewController: UIViewController? {
var parentResponder: UIResponder? = self
while parentResponder != nil {
parentResponder = parentResponder!.next
if let viewController = parentResponder as? UIViewController {
return viewController
}
}
return nil
}
}
Вы можете просто изменить кнопку в вашем UITableViewCell
, чтобы рекурсивно проверять следующий респондент, пока он не будет иметь тип UIViewController
. Как только вы найдете это UIViewController
, вы можете предоставить ему UIAlertController
или любой другой контроллер представления:
Источник: Если получить представление, как мне получить его viewController?
Когда вы найдете это UIViewController
, вы можете представить его UIAlertController
или любым другим контроллером вида:
class YourTableViewCell: UITableViewCell {
...
@IBAction func customButtonPressed(_ sender: Any) {
let alertController = UIAlertController(title: "Your alert title.", message: "Your alert message.", preferredStyle: .alert)
guard let parentVC = self.parentViewController else { return }
parentVC.present(alertController, animated: true, completion: nil)
}
...
}