我正在开发一款iPhone应用程序(其中包括),其中包含具有大量属性和大量相关记录的记录的详细视图。我没有一个真正的长滚动视图或表视图,而是认为将细节视图分解为几个单独的视图(一些UIViews,一些UITableViews等)可能最容易,每个视图都显示一个分组记录的属性或相关记录。
我使用UINavigationController来控制我的应用程序中的视图更改,我可以将一个UISegmentedController toolbar
来控制要显示的记录属性或关系的哪一组。这看起来像是:
like this: http://i37.tinypic.com/5z1q2g.jpg
我认为这是最好的方法,但是如何在不推动和弹出导航控制器的情况下填充内容区?
这甚至是“正确”的方式吗?这不必要地复杂吗?或者是否有一些我应该考虑的本机控制器呢?
谢谢!
答案 0 :(得分:1)
首先,我建议寻找一些方法来将UISegmentedControl破解到UITabBarController上,替换UITabBar,因为这似乎会产生你想要的行为而不需要进一步的努力。但是,目前这似乎不可能。因此,我建议您使用自定义视图,您希望内容基本上只有一个属性,即UIView。设置UIView后,contentview应删除其所有子视图并将视图添加为其唯一的子视图,并对其进行缩放以填充整个内容视图。应根据UIViewControllers数组(索引与UISegmentedControl匹配)选择这些视图。
答案 1 :(得分:0)
我认为那没关系。你的视图控制器类大致如下:
@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 loadNibNamed:owner:options:]手动加载它们。
将IBActions添加到视图控制器以显示每个视图:
-(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]连接您的操作,您应该很高兴。