代码之家  ›  专栏  ›  技术社区  ›  Neal L

在iPhone上构建长视图的“最佳”方法

  •  1
  • Neal L  · 技术社区  · 15 年前

    我正在开发一款iPhone应用程序,它(除其他外)有一个详细视图,可以查看具有大量属性和大量相关记录的记录。而不是有一个 真正地 长滚动视图或表视图,我认为将细节视图分成几个单独的视图(一些ui视图、一些uitable视图等)是最容易的,每个视图显示一组记录的属性或相关记录。

    我使用uinavigationController控制应用程序中的视图更改,我可以将uiSegmentedController toolbar 控制要显示的记录属性或关系组。如下所示:

    like this: http://i37.tinypic.com/5z1q2g.jpg

    我认为这是最好的方法,但是我如何在不从导航控制器中推送和弹出的情况下填充内容区域?

    这样做是不是“正确”?这是不必要的复杂吗?或者是否有一些本机控制器是我应该考虑的呢?

    谢谢!

    2 回复  |  直到 15 年前
        1
  •  0
  •   Seamus Campbell    15 年前

    我想没关系。您将得到一个视图控制器类,大致如下:

    @interface MyDetailViewController : UIViewController {
        // a blank, full-area view that will serve as the superview for modeSelector
        //     and your detail views
        UIView *rootView;
    
        UISegmentedControl *modeSelector;
    
        // placeholder to track the current view, not strictly necessary.
        UIView *currentDetailView;
    
        UIView *firstModeView;
        UIView *secondModeView;
        // ... etc.
    }
    

    您可能会将每个uiview组合存储在自己的nib中,并使用[nsbundle loadnibname:owner:options:]手动加载它们。

    向视图控制器添加i操作以显示每个视图:

    -(void)showSecondModelView:(id)sender {
        if(currentDetailView != secondModeView) {
            [self.rootView addSubview:secondModeView];
    
            // alternatively, you could keep all of your detail views
            //     on the root view, and use bringSubviewToFront
            [self.currentDetailView removeFromSuperview];
            self.currentDetailView = secondModeView;
        }
        return;
    }
    

    在ib或[modeSelector addTarget:action:forControlEvents]中连接您的操作,您应该可以很好地执行。

        2
  •  1
  •   Jared Pochtar    15 年前

    首先,我建议您寻找一些方法,将uisegmentedcontrol攻击到uitabarcontroller上,替换uitabarr,因为这看起来会产生您希望的行为,而无需进一步的努力。然而,目前看来这似乎不可能。因此,我建议使用一个自定义视图,您希望在其中使用内容,基本上只有一个属性,即uiview。设置该uiview后,ContentView应删除其所有子视图,并将该视图添加为其唯一子视图,并将其缩放以填充整个ContentView。这些视图应基于一组uiviewcontrollers(索引与uisegmentedcontrol匹配)进行选择。