从一个滚动视图过渡

6 浏览
0 Comments

从一个滚动视图过渡

我有一个UIscrollview,它占据了屏幕的大约一半。滚动视图包含一系列的视图控制器,这些视图控制器有按钮,按钮有segue到另一个视图控制器。当跟随这个segue时,它会在当前滚动视图的顶部加载视图控制器。

我希望这个新的视图控制器像任何其他模态segue一样,如果按钮不在子视图或滚动视图中。换句话说,占满整个屏幕。

是否可以在子视图或滚动视图中使用segue?

谢谢!

0
0 Comments

在这段内容中,作者提到了使用代理和协议来实现在滚动视图和父视图控制器之间的通信,并通过从父视图控制器中启动新视图来解决问题。根据这段内容,可以推断出问题的出现原因是在滚动视图中进行segue导致的,并且作者通过使用代理和协议的方式来解决这个问题。

解决方法如下:

1. 在滚动视图和父视图控制器之间创建代理和协议。

2. 在滚动视图中定义一个代理属性,并在需要进行segue的地方调用代理方法。

3. 在父视图控制器中实现代理方法,并在方法中执行需要的操作,例如启动新视图。

4. 在父视图控制器中创建滚动视图的实例,并设置代理为父视图控制器自身。

5. 当需要进行segue时,在滚动视图中调用代理方法。

代码示例:

// 在滚动视图中定义代理和协议

protocol ScrollViewDelegate: class {

func performSegue()

}

class ScrollView: UIView {

weak var delegate: ScrollViewDelegate?

// 在需要进行segue的地方调用代理方法

func buttonTapped() {

delegate?.performSegue()

}

}

class ParentViewController: UIViewController, ScrollViewDelegate {

override func viewDidLoad() {

super.viewDidLoad()

// 创建滚动视图实例并设置代理

let scrollView = ScrollView()

scrollView.delegate = self

// 添加滚动视图到父视图控制器的视图层级中

view.addSubview(scrollView)

}

// 实现代理方法,在方法中执行需要的操作,例如启动新视图

func performSegue() {

performSegue(withIdentifier: "segueIdentifier", sender: self)

}

}

通过以上方法,可以通过代理和协议在滚动视图和父视图控制器之间进行通信,并在需要进行segue时,在父视图控制器中启动新视图。这样就解决了在滚动视图中进行segue导致的问题。

0
0 Comments

问题的出现原因是UIScrollView实例不能“包含”视图控制器,它只能包含其他视图。它可以包含由其他视图控制器管理的视图,但如果您同时使用多个视图控制器,您可能需要阅读“Am I abusing UIViewController Subclassing?”(https://stackoverflow.com/q/5691226/643383)。

解决方法是将视图添加到UIScrollView中,但这并不能解决确保视图控制器/视图包含在UIScrollView中,而不是占据整个屏幕的问题。

0