从另一个视图控制器调用函数以更新特定的单元格

时间:2018-11-08 19:00:01

标签: ios swift

在我的SecondViewClass中,无论何时通过在ViewController中调用@objc func toReload()来单击按钮时,我都试图更新ViewController类中的单元格0。

SecondViewController代码:

@IBAction func setFav(_ sender: Any) 
{

let storyboard: UIStoryboard = UIStoryboard.init(name: "toVC", bundle: nil)

let VC: ViewController = storyboard.instantiateViewController(withIdentifier: "toVC") as! ViewController

   VC.toReload(rowNumber: 0)

}

ViewController codes:


@objc func toReload(rowNumber: Int){
    reload = true

let indexPath = IndexPath(row: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .none)
}

每当我单击按钮时,都会给我带来线程错误

2 个答案:

答案 0 :(得分:1)

这将创建一个新的vc,而不是实际显示的

let storyboard: UIStoryboard = UIStoryboard.init(name: "toVC", bundle: nil)
let VC: ViewController = storyboard.instantiateViewController(withIdentifier: "toVC") as! ViewController

并且在尚未加载此伪造的vc并导致nil异常的情况下访问表

VC.toReload(rowNumber: 0)

您需要一个委托var

weak var delegate:FirstVC?

当您显示SecondVc时,将其设置为

let second = //
second.delegate = self
present/push(second

然后在setFav

中使用它
delegate?.toReload(rowNumber: 0)

答案 1 :(得分:0)

您可以按照@Sh_Khan所述在委托人上实现此目标,也可以更轻松地实现。

在您的SecondVC中创建

var completion:((_ index:Int)->())?

setFav之内称为

guard let completionCall = completion else {return}
completionCall(0)

在您创建了SecondVC实例的firstVC中,使用相同的实例进行操作

secondVCObj = { index in 
    let indexPath = IndexPath(row: rowNumber, section: 0)
    tableView.reloadRows(at: [indexPath], with: .none)
  }