UIScrollView 常见于不同的 viewControllers
Posted
技术标签:
【中文标题】UIScrollView 常见于不同的 viewControllers【英文标题】:UIScrollView common for different viewControllers 【发布时间】:2013-06-13 14:30:32 【问题描述】:我必须有一个带有 9 个选项卡的 tabBar,所以我添加了一个带有 9 个按钮的 Srollview(MHScrollViewController) 而不是 tabBar。单击每个按钮时,我将 viewController 作为子视图添加到 Srollview。
在 AppDelegate 中,有以下代码:
MHScrollViewController *scrollViewController = [[MHScrollViewController alloc] initWithNibName:@"MHScrollView" bundle:nil];
scrollViewController.managedObjectContext = [self managedObjectContext];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:scrollViewController];
self.window.rootViewController = self.navigationController;
现在说一个选项卡(按钮),我已将 MHBikesViewController 添加到 MHScrollViewController 作为子视图。在 MHScrollViewController 中,我这样做了
bikesViewController = [[MHBikesViewController alloc] initWithNibName:@"MHBikesView" bundle:nil];
bikesViewController.managedObjectContext = self.managedObjectContext;
bikesViewController.view.frame = baseViewiPhone.frame;
CGRect theFrame = bikesViewController.view.frame;
theFrame.origin.y = 0;
bikesViewController.view.frame = theFrame;
bikesViewController.navigationController = self.navigationController;
[baseViewiPhone addSubview:bikesViewController.view];
现在,我在 MHBikesViewController 页面上有两个按钮。单击时,我想在 MHBikesViewController 上推送一个新的视图控制器。我可以推送,但滚动视图隐藏在此视图控制器下。
【问题讨论】:
【参考方案1】:UINavigationController 无论如何都会用新推送的控制器覆盖其所有内容,因此您需要使用导航控制器之外的按钮来获取滚动视图。
【讨论】:
【参考方案2】:在设计 UI 时要注意 UIViewController 父/子关系和责任。
控制器拥有一个主 UIView 及其所有子视图。 当将此 viewController 的视图添加到更复杂的视图层次结构中时,此控制器应该是控制此“包含”UI 的 viewController 的子级。
问问自己:你的遏制模型是什么?
9 个标签和一些占据屏幕其余部分的相关内容?
那么在你的情况下,MHScrollViewController
是爸爸,它拥有可滚动的标签和当前的 viewController 主视图。它不应该是UINavigationController
(可以是持有你的MHBikesViewController
的自己的父“内容”)
父母->您的情况下的儿童收容措施:
MHScrollViewController
-> UINavigationController
-> MHBikesViewController
添加和删除子 viewController 是父级的责任。
//(somewhere in MHScrollViewController.m or .h )
@property (nonatomic, strong) UIViewController *newContentController;
@property (nonatomic, weak) UIScrollView *tabsScrollView;
// method for pushing any 'tab' controller
// might be your UINavigationController
- (void)displayTabController:(UIViewController *)vc
// remove previous controller
if (self.contentController)
[self.contentController.view removeFromSuperview];
[self.contentController removeFromParentViewController];
//push the new controller, maintaining child/parent relationship
self.contentController = newContentController;
[self.view addSubview:contentController.view];
[self.contentController didMoveToParentViewController:self];
// set frame of contentController so that it stays above scrollView
self.contentController.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - self.tabsScrollView.bounds.size.height)
【讨论】:
【参考方案3】:您可以按标准方式拥有一个带有 9 个选项卡的选项卡栏。它将自动创建一个“更多”选项卡。它可能不像你想要的那样光滑。
【讨论】:
以上是关于UIScrollView 常见于不同的 viewControllers的主要内容,如果未能解决你的问题,请参考以下文章
问题解决:Python中取消科学计数法,常见于Numpy|Pandas