从AppDelegate中取出代码会对视图产生负面影响

时间:2015-01-25 04:45:22

标签: ios iphone swift uipageviewcontroller

我是iOS开发的新手,并尝试使用Pages实现Twitter iOS导航栏。

我遇到了这个:https://github.com/aubrey/SwiftPagingNav/tree/master/SwiftPagingNav

当我加载它时,它工作得很好,但是在用户成功登录后我需要到达那个UIViewController。

所以,我从AppDelegate中取出代码并将其放入我自己的PagingNavController viewDidLoad()函数中。但是,当我删除window.makeKeyAndBackground()时,导航栏没有显示,当我确实包含它时,我得到一个不平衡的调用开始/结束外观错误。

此外,我不知道在AppDelegate之外弄乱窗口是否是好习惯。

我如何将代码划分为PagingNavController?

修改

我想要完成的是拥有2个页面,您可以像Twitter一样浏览。这两个页面都应该有自己的ViewControllers来容纳TableViews。

我成功管理了

将上面链接中显示的3个滚动视图中的第二个更改为我的一个ViewControllers:

我使用的代码是:

let viewController = storyboard?.instantiateViewControllerWithIdentifier("myViewController") as? ViewController
view2 = viewController?.view
view2.backgroundColor = UIColor(red:0.231, green:0.529, blue:0.757, alpha: 1)
view2.frame = CGRectMake(wBounds, 0, wBounds, hBounds)
self.scrollView.addSubview(view2)
self.scrollView.bringSubviewToFront(view2)

但是,当我按下ViewController中的按钮时,我注意到我得到EXC_BAD_ACCESS

我猜测使用ScrollViews可能不是实现我想要的最好方法吗?

更新:我设法修复了上面编辑中的错误,但我仍然无法以编程方式生成导航栏。仅适用于AppDelegate代码,但我不明白为什么。

BIG UPDATE:基本上我设法得到了我喜欢的功能!

在viewDidLoad中,我执行以下操作:

var navBar: UINavigationBar = UINavigationBar(frame: CGRectMake(0, 0, self.view.bounds.width, 64))

// Lots of code from above link. Make sure to delete
// self.navigationController?.navigationBar.addSubview(navbarView)

navBar.addSubview(navbarView)
self.view.addSubview(navBar)

然后,将viewDidLayoutSubviews更改为:

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        navbarView.frame = CGRect(x: 0, y: 20, width: self.view.bounds.width, height: 64)
    }

基本上,我创建了自己的导航栏,然后根据iOS规范定位它。

我唯一的问题(出于某种原因)是标题都聚集在一起,直到用户第一次开始滚动。这应该是一个简单的解决方案。

1 个答案:

答案 0 :(得分:0)

您还需要将viewController添加为" child"查看PagingNavController的控制器

尝试在bringSubviewToFront调用

之后添加以下行
addChildViewController(viewController!)
viewController?.didMoveToParentViewController(self)

有关详细信息,请参阅以下行: http://www.objc.io/issue-1/containment-view-controller.html

侧节点:您应该使viewController非可选。它目前是可选的,因为您使用的是as?,但由于您确定它不会为零,因此您可以使用as(不使用?)。然后你可以删除?而且!在对viewController的任何引用之后