简体   繁体   中英

UITableView didSelectRowAtIndex TabBar and Subview Not working

I'm tearing my hair out over this gotcha and have been for a couple of weeks. XCode 4.2 with build aimed at IOS4, so I'm dealing with .XIB files.

I'm writing an iphone app with two tabs provided via tabBar, 1) my artists, 2) all artists. Each of the tabs has a UITableview that is fancy. There is also a detail view which desplays more information about the work. (There is also a HUD display which is a copy of Matej Bukovinski's MBProgressHUD)

When I call didSelectRowAtIndexPath I can't bring up the detail view to save my life. (It does fire correctly.

I know I've got to be missing something basic but... I just can't find it to save my life.

Thanks in advance.

-Rob

AppDelegate.h

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate> {
    UINavigationController *navigationController;

}
@property (strong, nonatomic) UINavigationController *navigationController; 
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UITabBarController *tabBarController;
@end

AppDelegate.m

#import "AppDelegate.h"
#import "MyArtistsViewController.h"
#import "SecondViewController.h"
#import "TicketDetailView.h"
#import "viewTest.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize tabBarController = _tabBarController;
@synthesize navigationController =_navigationController; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    //Test on navigationController
    //navigationController = [[UINavigationController alloc] initWithRootViewController:MyArtistsViewController];
    // Override point for customization after application launch.
    UIViewController *viewController1 = [[MyArtistsViewController alloc] initWithNibName:@"MyArtistsViewController" bundle:nil];
    //UINavigationController *viewController1 = [[MyArtistsViewController alloc] initWithNibName:@"MyArtistsViewController" bundle:nil];

    //UIViewController *tvc = [[TicketViewController alloc] initWithNibName:@"TicketViewController" bundle:nil]; 
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:_tabBarController];


    UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];


    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

MyArtistsViewController.h

#include "MBProgressHUD.h"
#import "TicketViewController.h"
@interface MyArtistsViewController : UIViewController
<MPMediaPickerControllerDelegate, UITableViewDelegate,CLLocationManagerDelegate,  
UITableViewDataSource, MBProgressHUDDelegate> 
{
    IBOutlet UITableView *tblEvents; 
    MBProgressHUD *HUD;

}
@property (nonatomic, retain) TicketViewController *detailViewController;
@property (nonatomic, retain) IBOutlet UITableView *tblEvents; 
@property (nonatomic, retain) IBOutlet CLLocationManager *locationManager; 
@property (nonatomic, retain) NSString *eventID, *artistName; 
@end

MyArtistsViewController.m

#import "MyArtistsViewController.h"
@synthesize ticketViewController; 
@synthesize detailViewController; 
@synthesize tblEvents;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.title = NSLocalizedString(@"Master", @"Master");
    }
    return self;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.detailViewController) {
        self.detailViewController = [[TicketViewController alloc] initWithNibName:@"TicketViewController" bundle:nil];
    }
    [self.navigationController pushViewController:self.detailViewController animated:YES];
}
- (void)viewDidLoad
//Create the Spinner or (HUD, Heads Up Display)  to let the User know whats going on. 
    HUD = [[MBProgressHUD alloc] initWithView:self.view]; [self.view addSubview:HUD];
    [self.navigationController.view addSubview:HUD];

    HUD.delegate = self;
    HUD.labelText = @"Loading";
    HUD.detailsLabelText = @"Wow you read this far!";
    HUD.square = YES;
    [HUD show:YES]; 

    // Does a bunch of stuff

    [HUD show:NO];

In AppDelegate.m, you must add UINavigationController to tab bar view controler instead of normal View controller :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    //Test on navigationController
    //navigationController = [[UINavigationController alloc] initWithRootViewController:MyArtistsViewController];
    // Override point for customization after application launch.
    UIViewController *artistsVC = [[[MyArtistsViewController alloc] initWithNibName:@"MyArtistsViewController" bundle:nil] autorelease]; //remove autorelease if ARC support
    UINavigationController *viewController1 = [[[UINavigationController alloc] initWithRootViewController:artistsVC] autorelease];

    //UIViewController *tvc = [[TicketViewController alloc] initWithNibName:@"TicketViewController" bundle:nil]; 
    //self.navigationController = [[UINavigationController alloc] initWithRootViewController:_tabBarController];


    UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];


    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM