Swift 4 - 如何以编程方式从嵌套在UICollectionViewCell

时间:2018-01-15 01:46:07

标签: ios uiviewcontroller uicollectionview swift4 xcode9

我正在尝试激活UICollectionView,UIViewController的子视图和单独的ViewController(称为RegisterController)之间的segue。 CollectionView全部以编程方式设置,最后一个单元格上有一个按钮。但是,我无法执行典型的performSegue(_:withIdentfier),因为该按钮位于CollectionView中。所以,我在ViewController中设置了一个方法,将CollectionView保存到performSegue(_:withIdentifier)。我在CollectionViewController中设置了一个实例来调用方法:

lazy var registerButton: UIButton = {
    let btn = UIButton(type: .system)
    btn.setTitle("Don't have an account?", for: .normal)
    btn.setTitleColor(lighterOrange, for: .normal)
    btn.addTarget(self, action: #selector(registerScreenAppear), for: .touchUpInside)
    return btn
}()

@objc func registerScreenAppear(){
    let vc: ViewController = ViewController()
    _ = vc.toRegister()
}

ViewController中的方法是

func toRegister(){
    performSegue(withIdentifier: "toRegister", sender: self)
}

我收到了调用堆栈:     NSInvalidArgumentException', reason: 'Receiver (<audible.ViewController: 0x7fe780724770>) has no segue with identifier 'toRegister''

我知道我可能做了一些完全错误的事情,但我已经进行了搜索和搜索,无法找到解决方案。感谢任何帮助,谢谢

(是的,我已经配置了segue并在故事板中给它一个标识符,但我必须通过代码执行此操作的原因是因为CollectionView和按钮是以编程方式创建的,所以我无法使用Interface Builder)

1 个答案:

答案 0 :(得分:1)

在registerScreenAppear方法中调用performSegu e或致电self.toRegister()

@objc func registerScreenAppear(){
    self.toRegister()
}

OR

 @objc func registerScreenAppear(){
    performSegue(withIdentifier: "toRegister", sender: self)
 }

注意:稍后使用,因为它将删除额外的函数调用,即toRegister()。