我有一个 tableviewcontroller 并且在 tableviewcontroller 的相应 rowclick 上我想显示相应行的详细信息内容的详细信息。
行详细信息视图将具有如下固定内容:
- 标题
- 标题下方的标题
- 与标题相关的图像
- 这里我想展示 uitabbarcontroller 选项卡按钮的各个视图
在以上几点中,第 1-3 点的内容将覆盖视图控制器页面的一半,这将是固定的,视图控制器的下半部分将具有第 4 点,即各个选项卡按钮的视图,这些视图将根据为各个选项卡创建的视图而改变.
我无法找到任何解决方案来保持视图的上半部分固定。以及如何将标签栏的视图限制在屏幕的下半部分。
我在不使用 storyboard的情况下做这个应用程序。
搜索了很多,但没有得到任何解决方案。
请提供一些示例代码或教程(如果有)。
以下是我在 android 中创建的完全相同的图像。
抱歉需要模糊图像的内容。
在上图中,以下是我想要修复的内容:
- 顶部的蓝色条是标题,它将保持固定。
- 标题下方的棕色条和标题下方的白色图像也已修复。
- 图片下方的四个按钮是标签栏按钮,在 IOS 中将出现在屏幕底部。
- 标签栏按钮下方是包含第一个标签栏按钮内容的视图。
我的问题是我希望修复上述前 2 点,并且应该在屏幕的其余半部分使用 4 个标签栏按钮看到包含各个标签栏按钮视图的视图控制器。
因此,如果我单击任何选项卡按钮,只有屏幕下半部分占据的视图会改变,而上半部分将保持静态(固定)。
希望我的解释能澄清对这个问题的一些疑问。
----基于@Simon McLoughlin 建议的编辑解决方案,以下是代码:
我已经实现了一个函数,我在其中编写了代码来实现我的场景。
-(void)loadShowDetailsTabBarController
{
ConceptViewController *conceptViewController;
CastViewController *castViewController;
ShowDetailsFeedbackViewController *showDetailsFeedbackViewController;
PromosViewController *promoViewController;
UIImage *conceptBtn = [UIImage imageNamed:@"showdetailstabidle_btn_bg.png"];
UIImage *conceptBtnSelected = [UIImage imageNamed:@"showdetailstabselected_btn_bg.png"];
UIImage *castBtn = [UIImage imageNamed:@"showdetailstabidle_btn_bg.png"];
UIImage *castBtnSelected = [UIImage imageNamed:@"showdetailstabselected_btn_bg.png"];
UIImage *feedbackBtn = [UIImage imageNamed:@"showdetailstabidle_btn_bg.png"];
UIImage *feedbackBtnSelected = [UIImage imageNamed:@"showdetailstabselected_btn_bg.png"];
UIImage *promoBtn = [UIImage imageNamed:@"showdetailstabidle_btn_bg.png"];
UIImage *promoBtnSelected = [UIImage imageNamed:@"showdetailstabselected_btn_bg.png"];
conceptBtn = [conceptBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
conceptBtnSelected = [conceptBtnSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
castBtn = [castBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
castBtnSelected = [castBtnSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
feedbackBtn = [feedbackBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
feedbackBtnSelected = [feedbackBtnSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
promoBtn = [promoBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
promoBtnSelected = [promoBtnSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
conceptViewController = [[ConceptViewController alloc] initWithNibName:@"ConceptViewController_iPad" bundle:nil];
castViewController = [[CastViewController alloc] initWithNibName:@"CastViewController_iPad" bundle:nil];
showDetailsFeedbackViewController = [[ShowDetailsFeedbackViewController alloc] initWithNibName:@"ShowDetailsFeedbackViewController_iPad" bundle:nil];
promoViewController = [[PromosViewController alloc] initWithNibName:@"PromosViewController_iPad" bundle:nil];
}
else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
conceptViewController = [[ConceptViewController alloc] initWithNibName:@"ConceptViewController" bundle:nil];
castViewController = [[CastViewController alloc] initWithNibName:@"CastViewController" bundle:nil];
showDetailsFeedbackViewController = [[ShowDetailsFeedbackViewController alloc] initWithNibName:@"ShowDetailsFeedbackViewController" bundle:nil];
promoViewController = [[PromosViewController alloc] initWithNibName:@"PromosViewController" bundle:nil];
}
conceptViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"CONCEPT" image:conceptBtn selectedImage:conceptBtn];
castViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"CAST" image:castBtn selectedImage:castBtnSelected];
showDetailsFeedbackViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"FEEDBACK" image:feedbackBtn selectedImage:feedbackBtnSelected];
promoViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"PROMO" image:promoBtn selectedImage:promoBtnSelected];/**/
UITabBarController *showDetailstabVC = [[UITabBarController alloc] init];
showDetailstabVC.viewControllers = [NSArray arrayWithObjects:conceptViewController,castViewController,showDetailsFeedbackViewController,promoViewController, nil];
showDetailstabVC.view.frame = CGRectMake(0, 250, screenSize.width, screenSize.height-250);
self.view.window.rootViewController = showDetailstabVC;
[self.view addSubview:showDetailstabVC.view];
}
请让我知道我的代码是否正确?
我可以看到我想要的。
但是现在的问题是,当我单击标签栏按钮时,出现以下错误:
exc_bad_access(代码=exc_i386_gpflt)
调试屏幕中未给出错误,应用程序在main.m中的以下行停止:
返回 UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));