阻止UISplitViewController关闭详细视图中单击的主选项卡?

时间:2016-02-22 22:31:37

标签: ios uigesturerecognizer uisplitviewcontroller uialertcontroller

UISplitViewController用于显示模式为PrimaryOverlay的iPad应用,并在UITableViewControllers中嵌入UINavigationControllers

当主viewController重新加载内容并显示UIRefreshControl时,我想阻止在主视图外部点按以使主要关闭。我四处寻找可能正在拦截水龙头的UIGestureRecognizer,但在任何看似相关的视图中找不到一个。我似乎也无法通过在两个分割窗格中的任何一个上添加我自己的屏幕大小视图来阻止这种情况,或者甚至将其添加为splitView本身的子视图。

拆分视图控制器会在主要表视图中安装两个手势识别器,可能与滑动手势有关,一个是水龙头,另一个是滑动识别器。但禁用两者(通过将其enabled属性设置为false)对行为没有影响,完全删除它们也是如此。

没有明显的委托方法可用于停止关闭。在这一点上,我完全失去了为获得我想要的行为所做的一切。

2 个答案:

答案 0 :(得分:1)

我只能使用以下代码阻止主视图控制器关闭:

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication, 
        didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            window?.userInteractionEnabled = false

            return true
    }
}

但这显然会产生其他不良副作用(用户根本无法与您的应用进行互动)。

也许更好的解决方案是允许用户关闭主视图控制器,并让主视图控制器适当地处理它。这似乎是Apple希望在此显示模式下使用UISplitViewController的方式。

在刷新时保持主视图控制器打开的动机是什么?

答案 1 :(得分:0)

我确实在这里找到了解决办法 - 一种防止窗格在一些长时间运行的任务正在进行时关闭的方法 - 但是虽然不优雅但它看起来是可行的。

解决方法:弹出警报,并添加可用于显示活动进度的文本字段(我知道,哎呀!)

我刚刚确认警报块触及视图边界之外。因此,您可以创建警报,添加一个或两个文本字段,并在显示警报之前获取其中的引用。

当您的刷新控件旋转(或者您可能先关闭它)时,您会定期使用进度信息更新其中一个文本字段(我还没有验证这是否有效,我会在找到时更新答案)。< / p>

如果您希望它看起来比纯文本更好,请使用带有图像的NSAttributed字符串。图像可以像棒一样进步!但是,更新它可能会导致屏幕闪烁(再次,没有这样做)。

或者,警报只显示“取消”按钮,用户可以通过后台查看一些进度信息。

是的,真正的黑客。如果背景中的进度控制是可见的,那么替代解决方案可能并不是那么糟糕。请注意,刷新控件接受属性文本,因此可以使用它来实现进度指示器。