UIPageViewController : 滚动委托

UIPageViewController : Scroll Delegate

在我的 iOS 应用中,我想设置我的 PageViewController 的主 UIScrollView 的委托。

有很多回答说:“好吧,伙计,只需遍历子视图,您就会找到滚动视图”。

好的,它有效,但它是否通过了 Apple 验证步骤?这不是调用 private API 吗?有人用这个技巧成功发布了应用程序吗?

谢谢大家,

简而言之,不,这不会影响 Apple 的验证步骤。有关 Apple 检测私人 API 使用情况的列表,请参阅 this answer。他们主要是在寻找您是否引用私有 class 或选择器。例如 UIKeyboardImpl_setViewDelegate:.

我个人在应用商店中有一些非常相似的东西。我需要在 UISearchBar 中获取 UITextField 所以我有以下代码:

UIView<UITextInput> *UISearchBarTextInput(UISearchBar *searchBar) {
    for (id view in searchBar.subviews) {

        // Could be in the top level. (iOS6)
        if ([view conformsToProtocol:@protocol(UITextInput)]) {
            return view;
        }

        // Or the next level. (iOS7)
        for (id subview in [view subviews]) {
            if ([subview conformsToProtocol:@protocol(UITextInput)]) {
                return subview;
            }
        }
    }

    return nil;
}

您可能 运行 遇到的大问题是您正在处理私有视图层次结构,Apple 不保证它在 iOS 版本之间保持不变。在上面的代码中,我必须支持两个不同的 iOS 版本。如果他们决定在 iOS9 中进行更改,我将不得不修改我的代码。在这种情况下,最好假设您的查找可能会失败(您将无法找到滚动视图或可能会添加一个新的滚动视图)并使您的代码能够适应这种情况。

此外,您还必须考虑到人们会将您的应用作为应用商店评论的一部分。如果你对预期行为的改变太多,它可能会被拒绝。