目前我有一个包含ViewController
的{{1}}类,在滚动视图中我有另一个视图控制器,我可以在其中接收手势识别。我的目标是能够根据我点击的subViewController对不同的视图控制器执行segue。
UIScrollView
然后在subView类中我有一个基本的触摸识别功能:
let scrollView = UIScrollView(frame: CGRect(x:0,y:0, width: self.view.frame.width, height:self.view.frame.height-106))
scrollView.delegate = self;
self.view.addSubview(scrollView);
let subView11 = subView(nibName: nil, bundle: nil);
subView1.view.frame = CGRect(x:0,y:0, width: self.view.frame.width, height: CGFloat(openReelHeight));
self.addChildViewController(subView1);
scrollView.addSubview(subView1.view);
subView.didMove(toParentViewController: self);
答案 0 :(得分:0)
我建议让父母执行segue。因此,您需要一种机制让孩子通知家长按钮已被点击。这有两种方法:
子视图控制器可以定义一个协议,然后让按钮的@IBAction
在父视图控制器中调用它。
protocol ChildViewControllerDelegate {
func child(_ child: ChildViewController, didTapButton button: Any)
}
class ChildViewController: UIViewController {
@IBAction func didTapButton(_ sender: Any) {
if let parent = parent as? ChildViewControllerDelegate {
parent.child(self, didTapButton: sender)
}
}
}
显然,父视图控制器需要符合该协议:
extension ViewController: ChildViewControllerDelegate {
func child(_ child: ChildViewController, didTapButton button: Any) {
// now segue to whatever you want
}
}
您也可以遵循明确的协议委托模式,而不是依赖parent
的视图控制器包含关系:
protocol ChildViewControllerDelegate: class {
func didTapButton(_ sender: Any)
}
class ChildViewController: UIViewController {
weak var delegate: ChildViewControllerDelegate?
@IBAction func didTapButton(_ sender: Any) {
delegate?.didTapButton(sender)
}
}
然后,当父母添加孩子时,必须明确设置delegate
:
let child = storyboard!.instantiateViewController(withIdentifier: "ChildViewController") as! ChildViewController
addChildViewController(child)
child.delegate = self
// add the child's view to your view hierarchy however appropriate for your app
child.didMove(toParentViewController: self)
当然,父母再次必须遵守这个协议:
extension ViewController: ChildViewControllerDelegate {
func didTapButton(_ sender: Any) {
// segue to next scene
}
}
注意,使用这两种方法,您可以更改协议的func
以包含您想要的任何参数(例如,传回某些UITextField
或其他内容)。同样,您可以使用方法名称使子项的功能意图更加明确。我使用了一些通用的方法和协议名称,因为我不知道各个孩子在做什么。