连接到选项卡栏控制器时,TableView不会切换到详细信息视图

时间:2010-08-12 05:09:29

标签: iphone uiviewcontroller pushviewcontroller

我创建了一个Tab Bar应用程序,删除了默认的FirstView和SecondView,并添加了以下两个ViewControllers:

  1. JustAnotherView(它只是一个内置UIView的UIViewController)
  2. MyListOfItems(这是一个内置TableView的UIViewController)
  3. 我有一个名为ListOfItemsDetailViewController的第三个ViewController,里面有一个UIView,当用户触摸其中一个TableView单元格时,它应该被调用。

    应用程序编译没有问题。我可以触摸两个标签栏按钮,然后显示正确的视图。

    问题: 单击TableView单元格时,将执行切换到详细信息视图的代码(不会出现崩溃或错误),但不会显示视图。

    这是应用程序和带有NSLog的调试器的屏幕截图,显示它通过pushViewController而不会崩溃:

    http://clip2net.com/clip/m52549/thumb640/1281588813-9c0ba-161kb.jpg

    这是代码。

    MyListOfItemsViewController.h

    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import "ListOfItemsDetailViewController.h";
    
    @interface MyListOfItemsViewController : UIViewController {
        ListOfItemsDetailViewController *listOfItemsDetailViewController;
    }
    
    @property (nonatomic, retain) ListOfItemsDetailViewController *listOfItemsDetailViewController;
    
    
    @end
    

    这是MyListOfItemsViewController.m文件:

    #import "MyListOfItemsViewController.h"
    @implementation MyListOfItemsViewController
    @synthesize listOfItemsDetailViewController;
    
    #pragma mark -
    #pragma mark View lifecycle
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem;
        self.title = @"My List Of Items";
        NSLog(@"My List Of Items Did Load");
    }
    
    #pragma mark -
    #pragma mark Table view data source
    // Customize the number of sections in the table view.
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        return 1;
    }
    // Customize the number of rows in the table view.
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
        return 5;
    }
    
    
    // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        static NSString *CellIdentifier = @"Cell";
        NSString *cellMessage;
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }
    
        cellMessage = [NSString stringWithFormat:@"indexPath: %d",indexPath.row];       
        cell.textLabel.text = cellMessage;
        return cell;
    }
    
    #pragma mark -
    #pragma mark Table view delegate
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
        ListOfItemsDetailViewController *vcListOfItemsDetail = [[ListOfItemsDetailViewController alloc] 
                                        initWithNibName:@"ListOfItemsDetail" bundle:[NSBundle mainBundle]];
        self.listOfItemsDetailViewController = vcListOfItemsDetail;
        [vcListOfItemsDetail release];
        [self.navigationController pushViewController:self.listOfItemsDetailViewController animated:YES];
    
        NSLog(@"Did Execute didSelectRowAtIndexPath WITHOUT Crashing or Error.");
    
    }
    
    #pragma mark -
    #pragma mark Memory management
    
    - (void)didReceiveMemoryWarning {
        // Releases the view if it doesn't have a superview.
        [super didReceiveMemoryWarning];
    
        // Relinquish ownership any cached data, images, etc that aren't in use.
    }
    
    - (void)viewDidUnload {
        // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
        // For example: self.myOutlet = nil;
        NSLog(@"My List Of Items View Did Unload");
    }
    
    
    - (void)dealloc {
        [super dealloc];
    }
    
    
    
    @end
    

    请帮忙。非常感谢!!!

    我一直在疯狂地尝试在iOS平台上进行基本导航。

    另外,请原谅非专业人士的问题,我知道大多数人已经明白如何做到这一点。

    提前致谢。 Jaosn

2 个答案:

答案 0 :(得分:1)

不要将第二个选项卡的viewcontroller设置为tableviewcontroller,而是将其设置为UINavigationController,并将navcontroller的RootViewController设置为“MyListOfItems”。完成后,您将可以访问viewcontroller中的navigationController属性,并可以使用push和pop。

或者如果您不想这样做,剩下的唯一方法是以编程方式在视图之间进行动画处理(即删除一个视图并添加另一个视图或在当前视图的顶部添加另一个视图)

答案 1 :(得分:0)

tableView:didSelectRowAtIndexPath:中,self.navigationController引用了一个navigationController,这可能不存在。您必须在tabView中使用UINavigationController作为一个视图控制器,该navigationController的rootViewController应该是MyListOfItemsViewController。

请注意,您需要一个UINavigationController用于您的详细信息视图,并且self.navigationController只是一种检索之一的方法,它已经创建并插入到层次结构中。