【问题标题】:TabBar Controller and NavigationBarTabBar 控制器和 NavigationBar
【发布时间】:2011-07-14 08:25:18
【问题描述】:

我需要构建一个带有标签栏控制器和一些视图控制器的应用程序,我已经完成了几乎所有代码,现在我在从第一个 TableView(在第一张图像中)推送视图控制器时遇到问题,因为我可以隐藏标签栏,但无法使用相对后退按钮显示我的导航栏。

我只是在这里问是否有人可以帮助我,也许可以解释我如何在 IB 中构建结构(以及代码),只是结构,因为我已经完成了所有其他工作。谢谢!

image of the App structure

【问题讨论】:

    标签: uinavigationcontroller uitabbarcontroller uinavigationbar uitabbar tabbar


    【解决方案1】:

    为了在你的第一个窗口中拥有 UITableView,你必须让你的 .h 文件成为 UITableViewController 的子类,并将所有必要的方法添加到你的 .m 中

    FirstViewController.h

    @interface FirstViewController : UITableViewController {
    
    }
    
    @end
    

    FirstViewController.m

    #import "FirstViewController.h"
    
    
    @implementation FirstViewController
    
    - (id)initWithStyle:(UITableViewStyle)style
    {
        self = [super initWithStyle:style];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    - (void)dealloc
    {
        [super dealloc];
    }
    
    - (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.
    }
    
    #pragma mark - View lifecycle
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        // Uncomment the following line to preserve selection between presentations.
        // self.clearsSelectionOnViewWillAppear = NO;
    
        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem;
    }
    
    - (void)viewDidUnload
    {
        [super viewDidUnload];
        // Release any retained subviews of the main view.
        // e.g. self.myOutlet = nil;
    }
    
    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
    }
    
    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
    }
    
    - (void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
    }
    
    - (void)viewDidDisappear:(BOOL)animated
    {
        [super viewDidDisappear:animated];
    }
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        // Return YES for supported orientations
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }
    
    #pragma mark - Table view data source
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
    #warning Potentially incomplete method implementation.
        // Return the number of sections.
        return 0;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    #warning Incomplete method implementation.
        // Return the number of rows in the section.
        return 0;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"Cell";
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }
    
        // Configure the cell...
    
        return cell;
    }
    
    /*
    // Override to support conditional editing of the table view.
    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // Return NO if you do not want the specified item to be editable.
        return YES;
    }
    */
    
    /*
    // Override to support editing the table view.
    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (editingStyle == UITableViewCellEditingStyleDelete) {
            // Delete the row from the data source
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        }   
        else if (editingStyle == UITableViewCellEditingStyleInsert) {
            // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
        }   
    }
    */
    
    /*
    // Override to support rearranging the table view.
    - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
    {
    }
    */
    
    /*
    // Override to support conditional rearranging of the table view.
    - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // Return NO if you do not want the item to be re-orderable.
        return YES;
    }
    */
    
    #pragma mark - Table view delegate
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // Navigation logic may go here. Create and push another view controller.
        /*
         <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
         // ...
         // Pass the selected object to the new view controller.
         [self.navigationController pushViewController:detailViewController animated:YES];
         [detailViewController release];
         */
    }
    
    @end
    

    现在您将在第一个视图中拥有一个表格视图。那么你所要做的就是推动下一个视图是这样的:

    NextViewController *next = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil];
    [next setTitle:@"Next View"];
    [self.navigationController pushViewController:next animated:YES];
    [next release];
    

    【讨论】:

    • 谢谢你,这对我有帮助!现在我不确定这是否适用于我的所有应用程序,但我在这个..
    【解决方案2】:

    NavigationViewController 和 TabViewController ,它们都是容器视图控制器。 所以你必须对他们的等级制度造假。

    根据您的图像,我认为您应该使用的外部视图是 TabBarViewController。

    首先,将其作为窗口对象的根视图控制器。

     UITabBarController*tabCtrl = [[UITabBarController] alloc] init];
     self.window.rootViewController = tabCtrl;
    

    第二,将第一个viewcontrolelr设为UINavigationController,然后添加到tabbarcontroller中。

    UINavigationController *firstCtrl = UINavigationController  init...
    firstCtrl.rootViewController = firstTableViewController// this is the table view that you want to show on the first tab.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 2014-05-18
      • 2013-09-21
      • 2018-03-24
      • 2012-10-05
      • 2022-11-03
      • 1970-01-01
      相关资源
      最近更新 更多