InAppSettingsKit 容器内部 - 导航问题

InAppSettingsKit Inside Container - Navigation Issues

我已经毫无问题地将 InAppSettingsKit 实现为模态控制器。那里一切都很好。那我想变漂亮!

我向我的自定义视图控制器之一添加了一个容器,并使嵌入式 segue 控制器以 TableViewController 为目标,一切都显示得很好。即使是子窗格也可以毫无问题地显示。但是后来我的问题开始了,当我转到子窗格时我无法返回。也就是说没有导航控件!!

我已经阅读了所有其他帖子,其中大多数人在显示子窗格时遇到问题,这对我来说不是问题,我只是无法从他们那里回来,因为没有导航控件。

我不确定它是否重要,但我的带有容器的自定义视图控制器是选项卡视图控制器的一部分。也许这就是为什么没有导航控件?还有其他人遇到这种情况或有快速修复方法吗?好像我缺少一些简单的东西,某个地方的设置。

我会继续努力,如果我想通了会更新!

更新

我们的应用程序立即隐藏了导航栏。我发现通过取消隐藏它我现在可以导航,这是有道理的。似乎解决这个问题的唯一方法是将子窗格中的 viewWillAppear/viewDidDisappear 覆盖为 enable/disable 导航窗格......现在看起来真的很痛苦(没有双关语意)因为我'您必须创建自定义子视图。试图弄清楚是否有 class 我可以从 InAppSettingsKit 扩展以仅添加这些覆盖。

你可以在这里找到我必须做的事情:https://github.com/futuretap/InAppSettingsKit/issues/277

另外,请注意我的用例是让 InAppSettingKit 在现有视图控制器内的容器中工作,我希望它有一个以前隐藏的导航栏。

如果这是您的用例,请继续阅读...

我真的不想重新发明轮子,所以我创建了一个已经存在的 IASKAppSettingsViewController class 的子class 然后添加了适当的 appear/disappear 功能。

我想这可能是扩展基础 class 任何你想要的地方的方法,你只需要设置基础然后就可以开始了!

希望这对其他人有帮助!!

class CustomSubviewController: IASKAppSettingsViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override init() {
        super.init()
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(style: UITableViewStyle) {
        super.init(style: style)
    }

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    }

    func myinit (file: NSString, specifier: IASKSpecifier) -> CustomSubviewController {
        var vc = CustomSubviewController()

        vc.showDoneButton = false;
        vc.showCreditsFooter = false; // Does not reload the tableview (but next setters do it)
        vc.delegate = self.delegate;
        vc.settingsStore = self.settingsStore;
        vc.file = specifier.file();
        vc.hiddenKeys = self.hiddenKeys;
        vc.title = specifier.title();

        return vc
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.setNavigationBarHidden(false, animated: animated)

    }

    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        self.navigationController?.setNavigationBarHidden(true, animated: animated)
    }

}