UIButton遍及UIPageViewController的所有页面

问题描述 投票:5回答:4

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

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

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

我怎么能用故事板做到这一点?

谢谢。

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

0
投票

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


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. set 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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.