UIButton遍及UIPageViewController的所有页面

时间:2014-11-23 03:53:08

标签: ios objective-c uiviewcontroller scroll uipageviewcontroller

我正在开发一款iPhone应用,并创建了一个UIPageViewController(我们称之为容器),其中包含多个UIViewController页面(让我们称之为的子页面)。 子页面转换样式是滚动。

现在,我想要做的是在容器的右上角创建一个按钮,而不是在子页面中创建一个按钮。我们的想法是,当子页面从一个页面滚动到另一个页面时,该按钮将保留在屏幕上。如果我在其中一个子页面中创建了按钮,则每个子页面都有自己的按钮,该按钮将使用子页面滚动。我想保留按钮而不移动容器,而子页面滚动。

我尝试使用故事板将按钮添加到容器,但现在允许使用。我不能放弃它,我怀疑原因是因为容器属于UIPageViewController类型。

如何使用故事板来做到这一点?

感谢。

4 个答案:

答案 0 :(得分:14)

  1. 在故事板中,创建一个标准的Viewcontroller场景。
  2. 在此场景中添加固定按钮和容器视图。
  3. 添加容器视图将自动添加嵌入式视图控制器。选择此项并将其删除。
  4. 将页面视图控制器拖到故事板中。
  5. 选择容器视图并从" viewDidLoad"其中"触发的segues"列表到页面视图控制器。选择"嵌入"作为segue类型。

答案 1 :(得分:0)

在代码中,将按钮添加到uipageviewcontroller

答案 2 :(得分:0)

这是使用情节提要的解决方案。您必须执行一些代码,但这是最少的

  1. 在属性检查器中将视图添加到页面视图控制器视图层次结构
  2. 创建一个UIView子类,如果用户不与子视图交互,则允许触摸通过该视图(否则用户将无法在页面之间滑动)。感谢@john Stephen的answer to this question
class TouchThroughView: UIView {
        override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
            for subview in subviews {
                if !subview.isHidden && subview.isUserInteractionEnabled && subview.point(inside: convert(point, to: subview), with: event) {
                    return true
                }
            }
            return false
        }
    }
  1. 在您的PageViewController实例中为此视图创建一个出口。
  2. 将translateAutoresizingMaskINtoConstraints = false设置为
  3. 将出口作为子视图添加到PageViewController的根视图
  4. 添加约束以将出口定位在根视图中
  5. 设置要添加到页面视图控制器的视图的背景以清除(在界面构建器中)。
  6. 您完成了!将子视图和约束添加到您添加到情节提要中的页面视图控制器的视图中。

您的PageViewController将如下所示:

class MyPageViewController: UIPageViewController {
    // step 3
    @IBOutlet var touchThroughView: UIView!  

    override func viewDidLoad() {
        super.viewDidLoad()

        // your regular page View Controller implementation

       // step 4
       stationaryView.translatesAutoresizingMaskIntoConstraints = false 
        // step 5
        self.view.addSubview(touchThroughView) 

        // Step 6
        touchThroughView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        touchThroughView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        touchThroughView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        touchThroughView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    }
}

您的故事板将如下所示:

enter image description here

答案 3 :(得分:-1)

将按钮拖放到控制器(UIPageViewController)(确保它是好的控制器)。并添加一些约束来阻止它在顶角。