Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何实现此设计-iOS_Ios_Swift_Xcode6_Uistoryboard - Fatal编程技术网

如何实现此设计-iOS

如何实现此设计-iOS,ios,swift,xcode6,uistoryboard,Ios,Swift,Xcode6,Uistoryboard,我的应用程序是基于导航的iPad应用程序 第一个屏幕是主屏幕。单击主屏幕上的按钮,它将进入地图屏幕。在地图屏幕上,我在地图视图控制器上方有一个左面板(视图控制器),它占据了屏幕的1/4 左面板是一个具有表视图的视图控制器。单击单元格时,它应将新的viewcontroller推到左侧面板,将地图视图控制器留在后面 Push Home Screen -------- Map Screen |(Added over map screen)

我的应用程序是基于导航的iPad应用程序

第一个屏幕是主屏幕。单击主屏幕上的按钮,它将进入地图屏幕。在地图屏幕上,我在地图视图控制器上方有一个左面板(视图控制器),它占据了屏幕的1/4

左面板是一个具有表视图的视图控制器。单击单元格时,它应将新的viewcontroller推到左侧面板,将地图视图控制器留在后面

             Push
Home Screen -------- Map Screen
                  |(Added over map screen)         Push
                  |----- Left Panel (Table View) -------- Detail View
我不能使用分割视图控制器,因为在左面板和主屏幕中都有导航。有时我需要设置左面板的动画/隐藏左面板。我可以定制左面板


如何实现这个结构。是否可以使用嵌套导航控制器,或者是否有可用的库。我的应用程序支持纵向和横向。我用的是Swift。

对不起,我也不认识Swift。但是,我认为您必须声明一个基本布局: 您将拥有一个MainViewController,其中包括一个
LeftPanelViewController
和一个
FrontViewController
。在MainViewController nib中,您将使用
AutoLayout
:在屏幕左侧添加一个UIView,并为frontpage添加另一个UIView来创建主布局。 然后,链接插座,您将完成布局!然后只需将子视图添加/删除到
leftPanelView
FrontView

现在,我认为正确的逻辑是,
MainViewController
NavigationController
,因此您必须实现
LeftPanelViewController
FrontViewController
的协议,这样Main将知道如何以及何时添加/删除子视图

重要的是,任何对象都不必知道
MainViewController
的存在才能保留逻辑。因此,您必须通知
MainViewController
,以便使用
委派模式
或其他类似于
NSNotification
(请注意,它可能非常重要……)


我希望这会有帮助。再见

此UIViewController扩展将创建左侧的侧面板

private var temp_view:UIView?
private var temp_width:CGFloat?
private weak var temp_sidebar:UIViewController?

 extension UIViewController {



func configureSideBar(StoryBoard:String,SideBarIdentifier:String,View:UIView){

    var storyboard = UIStoryboard(name: StoryBoard, bundle: nil)
    weak var sidebar = storyboard.instantiateViewControllerWithIdentifier(SideBarIdentifier) as? UIViewController
    let width:CGFloat = 250//sidebar!.view.frame.size.width
    let height = UIScreen.mainScreen().bounds.height
    let frame = CGRectMake(0, 0, width, height)

    temp_view = View
    temp_width = width
    temp_sidebar = sidebar

    sidebar!.view.frame = frame
    addChildViewController(sidebar!)
    view.addSubview(sidebar!.view)
    view.sendSubviewToBack(sidebar!.view)
    toogleSideBarWithAnimation(0.2,Open:false)

}


func getSidebar() -> UIViewController?{

    if let sdbar = temp_sidebar {
        return sdbar
    }
    else {
       println("Warning:You have tou configure sidebar first")
        return nil
    }

}


func toogleSideBarWithAnimation(Duration:NSTimeInterval,Open:Bool) {

    if let view = temp_view {
        UIView.animateWithDuration(Duration, delay: 0, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: {
            var Frame = view.frame

            if !Open{

                Frame.origin.x = 0
            }
            else {
                Frame.origin.x = temp_width!
            }

            view.frame = Frame
            }, completion: { finished in

        })
    }
    else {
        println("Warning:You have tou configure sidebar first")

    }
}
}

让我解释一下如何使用它

首先创建一个视图控制器场景并设置情节提要id。在本例中,我使用了“侧边栏” 然后将此指令添加到地图视图控制器的viewDidLoad中,如下所示

    override func viewDidLoad() {
    super.viewDidLoad()
    self.configureSideBar("Main", SideBarIdentifier: "sidebar", View: Subview)
}
我建议在地图视图控制器中添加一个包含所有视图的UIView

要打开和关闭它,请使用此说明

self.toogleSideBarWithAnimation(0.2,Open:OpenSidebar)

我可以通过添加一个
ContainerView
作为左侧面板来解决这个问题。在这里进行推送时,可以将容器视图控制器设置为导航控制器,并将表视图作为其根视图控制器


您仍然可以像其他视图一样设置/隐藏容器视图的动画。

谢谢。但我认为我必须在左面板视图中手动处理推送和弹出动画。我认为
MainViewController
UIView
子视图中的
UINavigationController
不好。如果您实现一个自定义方法来添加/删除带有某种动画的子视图,可能会更好。