【问题标题】:UIButton across all pages of UIPageViewControllerUIPageViewController 所有页面的 UIButton
【发布时间】:2014-11-23 03:53:07
【问题描述】:

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

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

我尝试使用故事板将按钮添加到 container,但现在允许进入。我无法将其放在那里,我怀疑原因是因为 container 类型为UIPageViewController

如何使用情节提要来做到这一点?

谢谢。

【问题讨论】:

    标签: ios objective-c uiviewcontroller scroll uipageviewcontroller


    【解决方案1】:
    1. 在情节提要中,创建一个标准的 Viewcontroller 场景。
    2. 在此场景中添加固定按钮和容器视图。
    3. 添加容器视图将自动添加嵌入式视图控制器。选择并删除它。
    4. 将页面视图控制器拖到情节提要中。
    5. 选择容器视图并从其“触发的segues”列表中的“viewDidLoad”项拖动到页面视图控制器。选择“嵌入”作为转场类型。

    【讨论】:

    • 第 2 步中的“容器视图”到底是什么意思?你能解释更多吗? UIContainerView?
    • 如果您查看“视图”和“导航栏”之间的对象调色板,您应该会看到一个名为“容器视图”的对象 - 您可以将其添加到场景中,设置约束以定位它,然后它可以包含另一个视图控制器
    • @Greeso 容器视图在故事板中用于添加子视图控制器。保罗很抱歉跑题了,但你能在图片中透露一些关于电脑的细节吗:)
    • 很好的答案 +1
    【解决方案2】:

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

    【讨论】:

    • 我可以使用情节提要吗?我无法使用情节提要做到这一点。我更新了我的问题以更清楚。
    • 我无法让它在故事板中工作。但是使用代码效果很好。
    【解决方案3】:

    这是一个使用故事板的解决方案。你必须做一些代码,但它是最小的

    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
        }
    }
    

    您的故事板将如下所示:

    【讨论】:

    • 注意故事板图片中的名称与示例中的名称不匹配
    【解决方案4】:

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

    【讨论】:

    • 这对我不起作用,当它是 UIPageViewController 类型时,我无法将按钮放到情节提要中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多