iPhone:在模态视图标签栏中创建滚动图像/文本视图

Posted

技术标签:

【中文标题】iPhone:在模态视图标签栏中创建滚动图像/文本视图【英文标题】:iPhone: Creating Scrolling Image/Text Views within Modal View Tab Bars 【发布时间】:2011-04-11 14:40:22 【问题描述】:

我刚刚开始使用 Objective-C,并且正在寻找一种方法来创建一个 iPhone 应用程序,该应用程序将启动一个包含大约 8 个或 9 个按钮的主菜单。

当按钮被按下时,它将链接到一个滚动文本视图(包含几段文本),并在屏幕顶​​部带有一个伴随的图像,这将作为一个“返回”按钮返回到主菜单。我还希望将它设置为动画/行为模式视图(新视图从屏幕底部向上滚动,并在关闭/按下后退按钮时向下滚动)。

我已经让选项卡视图在模态视图中工作(通过按下主菜单中的按钮调出),并且已经制定了如何为每个选项卡分配自定义图标。我还为每个选项卡添加了自定义背景。虽然我仍然无法向每个选项卡添加滚动视图,但我可以在其中以编程方式插入图片和文本。我真的很感激你能给我的任何帮助..

非常感谢!!

.h

    #import <UIKit/UIKit.h>

@interface MasseurViewController : UIViewController 
    UITabBarController *tbc;


-(IBAction)showHeadTabBar;
-(void)dismissTabBar;

@property (nonatomic, retain) UITabBarController *tbc;

@end

.m

#import "MasseurViewController.h"

@implementation MasseurViewController

@synthesize tbc;

//---Implement all the possible Tab Bar views


-(IBAction)showHeadTabBar

    //---Define Back button

    UIImage *backImage = [UIImage imageNamed:@"headBackButton.png"];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0.0f, 0.0f, backImage.size.width, backImage.size.height);
    [button setImage:backImage forState:UIControlStateNormal];
    [button addTarget:self action:@selector(dismissTabBar) forControlEvents:UIControlEventTouchUpInside];

    UIButton *button2 = [UIButton buttonWithType:UIButtonTypeCustom];
    button2.frame = CGRectMake(0.0f, 0.0f, backImage.size.width, backImage.size.height);
    [button2 setImage:backImage forState:UIControlStateNormal];
    [button2 addTarget:self action:@selector(dismissTabBar) forControlEvents:UIControlEventTouchUpInside];

    UIButton *button3 = [UIButton buttonWithType:UIButtonTypeCustom];
    button3.frame = CGRectMake(0.0f, 0.0f, backImage.size.width, backImage.size.height);
    [button3 setImage:backImage forState:UIControlStateNormal];
    [button3 addTarget:self action:@selector(dismissTabBar) forControlEvents:UIControlEventTouchUpInside];

    //------------************TABS**************-------------------
    //-------------------------------------------------------------

    //---------------Declare View Controllers-----------
    //---------------------------TAB 1
    UIViewController *blueController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
    blueController.title = @"Blue";
    blueController.tabBarItem.image = [UIImage imageNamed:@"tabBar1.png"];
    //---Add tabs & Tab names
    [blueController.view addSubview:button];
    blueController.view.backgroundColor = [UIColor whiteColor];
    blueController.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"mainMenuBKG.png"]];   


    //----TAB 2
    UIViewController *redController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
    redController.view.backgroundColor = [UIColor grayColor];
    redController.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"shouldersImage1.png"]];    



    //----TAB 3
    UIViewController *greenController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
    greenController.view.backgroundColor = [UIColor greenColor];
    //--------------------------------------------------


    //---Instantiate tab bars

    tbc = [[UITabBarController alloc] initWithNibName:nil bundle:nil];

    //---Create array of tabs
    tbc.viewControllers = [NSArray arrayWithObjects:blueController, redController, greenController, nil];

    //---Select starting tab
    tbc.selectedViewController = blueController;

    //--------------------------------------------------


    //---Add tabs & Tab names

    [redController.view addSubview:button2];
    redController.title = @"Red";

    [greenController.view addSubview:button3];
    greenController.title = @"Green";


    //---Release Tab views
    [blueController release];
    [redController release];
    [greenController release];
    [self presentModalViewController:tbc animated:YES];




//---Code to dismiss Tab Bars
- (void)dismissTabBar 
    [self dismissModalViewControllerAnimated:YES];
    [tbc release];



/*
// The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
    
    return self;

*/

/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView 

*/


/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad 
    [super viewDidLoad];

*/


/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);

*/

- (void)didReceiveMemoryWarning 
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.


- (void)viewDidUnload 
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;



- (void)dealloc 
    [super dealloc];


@end

【问题讨论】:

以后请给一些时间来格式化你的代码 【参考方案1】:

您的问题过于笼统,无法很好地回答,但我会尽力为您指明正确的方向。

您不必为每个按钮创建单独的 .h/.m/.xib - 您可能希望包含所有按钮的主菜单页面由单个视图控制器类(.h、.m)控制在单个 .xib 文件中创建所有按钮可能会很方便。

您为每个按钮的操作创建的视图取决于您希望它执行的操作。例如,如果其中 3 个只显示图像,您可以重用一个名为 displayImageView 的类。

我建议您让您的应用使用带有单个按钮和操作的单个主视图,然后弄清楚如何将其扩展为 8 或 9 个操作。

最后,我认为您还有很多阅读工作要做。 Here 是一个很好的起点。祝你好运。

【讨论】:

@Mike 到目前为止,这是我的工作。我已经让选项卡视图在模态视图中工作(通过按下主菜单中的按钮调出),并制定了如何分配每个选项卡的自定义图标。我还为每个选项卡添加了自定义背景。虽然我仍然无法向每个选项卡添加滚动视图,但我可以在其中以编程方式插入图片和文本。我真的很感激你能给我的任何帮助.. 我必须承认我对你的界面看起来像什么或应该做什么感到困惑。如果您希望您的用户推送/弹出 8 或 9 个选项,@Irene 就在您身边:使用 UITableViewController 设置 UINavigationController,因为它是 rootViewController。每一行都充当一个按钮,将视图推送到导航堆栈上。您推送到堆栈上的视图将是一个 UIScrollView,您可以在其中添加文本和图像视图。 @Mike 感谢您的快速回复。基本上在用户看到的第一个视图中有多个按钮。列出的代码适用于按下该视图中的一个按钮时。按下时,它会以一个模态视图向上动画,该视图具有三个选项卡栏(位于视图底部)。模态视图的顶部是一个图像,用作返回用户看到的主菜单的按钮。我希望在每个选项卡中放置一个滚动视图,每个选项卡具有不同的内容,而不使用 IB。所以“blueController”有可滚动的图像,“redController”和“greenController”有文本。再次感谢! 仅供参考,BlueController 在您实例化它时没有要设置的 tabBarItem 属性,因此该行不会做任何事情。 我想你要找的是 UIScrollView *blueScrollView = [[UIScrollView alloc] initWithFrame ]; [blueController.view addSubview: blueScrollView]; UITextView *redScrollView = [[UITextView alloc] initWithFrame:]; [redController.view addSubview:redScrollView];然后给redScrollView添加一个UIImageView,设置blueScrollView和greenScrollView的文字;【参考方案2】:

在我看来,您所描述的内容非常适合使用导航控制器。 您的“主”视图应该是UITableView,而不是 8 或 9 个按钮。然后,每次用户在此表中选择一行时,您都会推送一个带有正确文本的详细视图。这意味着您不需要图像来充当“后退”按钮,因为导航控制器会自动为您提供该按钮(它是左上角的箭头形后退按钮)。

尝试阅读有关 iPhone 基本应用程序设计模式的更多信息(this 是一个好的开始),如果您想要一些示例代码,请尝试CoreDataBooks 或类似的东西。

祝你好运!

【讨论】:

以上是关于iPhone:在模态视图标签栏中创建滚动图像/文本视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在所有其他视图之前以模态方式呈现“启动视图”?

如何在iphone的子视图页面中创建带有导航返回按钮的导航栏

无法在标签栏控制器的顶部完全呈现模态视图控制器

在标签栏 xcode 中创建展示案例视图

TabBar App 模态视图控制器

如何在滚动视图中填充图像以填充屏幕?