1

我想用一些共享代码为不同的“模式”制作一个具有不同视图的应用程序(有些元素我想要总是相同的,并且背景会在不同的视图之间发生变化)。我将根据时间管理这些视图之间的转换。布局视图的最佳方式是什么?

我看着做一个标签视图,但它似乎有点不自然,因为标签栏不容易隐藏。我也可以做一个自定义容器(我最初的想法),但如果可能的话,留在“标准”iOS 视图中似乎会很好。

进行自定义视图是否听起来不错/我错过了更好的方法吗?

4

2 回答 2

1

我将有 2 个版本-layoutSubviews的父视图。就像是:

-(void)layoutSubviews
{
    if ( self.mode == 0 )
    {
        [ self layoutMode0 ] ;
    }
    else if ( self.mode == 1 )
    {
        [ self layoutMode1 ] ;
    }
}

您的布局代码还可以显示/隐藏某些视图或设置背景图像等。在您切换模式的代码中,调用-setNeedsLayout...这样的东西:

-(void)setMode:(enum Modes)newMode
{
    _mode = newMode ;
    [ self setNeedsLayout ] ;
}

如果您希望模式切换为动画,您可以执行以下操作:

-(void)setMode:(enum Mode)newMode animated:(BOOL)animated
{
    _mode = newMode ;
    if ( animated )
    {
        [ UIView animateWithDuration:0.25 animations:^{
            [ self layoutSubviews ] ;
        } ]
    }
    else
    {
        [ self setNeedsLayout ] ;
    }
}

你的普通二传手-setMode:看起来像这样:

-(void)setMode:(enum Mode)newMode
{
    [ self setMode:newMode animated:NO ] ;
}
于 2013-01-03T20:57:54.070 回答
1

如果您的模式是基于堆栈的,您也可以考虑使用 UINavigationController。导航栏可以很容易地隐藏(设置hidesNavigationBar为 YES)。当您推动或弹出与您可能想要设置animated为 NO 的模式相对应的控制器时,除非滑入/滑出动画适合您。

于 2013-01-03T21:02:41.123 回答