将导航控制器连接到基于视图的应用程序中的表视图

时间:2011-07-10 10:54:44

标签: iphone xcode cocoa-touch

我有一个基于视图的应用程序,它有一个主菜单。在主菜单中,用户可以选择一个选项,该选项显示从SQLite数据库(BrowseView)填充的表。这一切都运行正常,但是从表中我希望用户能够选择一行数据,这些数据将呈现详细视图,我无法使详细视图工作。没有任何事情发生。

我认为问题在于我没有将详细视图连接到UINavigation控制器,但我不确定如何做到这一点,因为我已经尝试了所有我能想到的东西(这可能不像我那么多'我很喜欢编程)。

对此的任何帮助都会有很大的帮助。这是我的代码。

在appDelegate.h中

@class ClubFindViewController;

@interface ClubFindAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
ClubFindViewController *viewController;
UINavigationController *navigationController;

NSMutableArray *clubArray;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ClubFindViewController *viewController;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

@property (nonatomic, retain) NSMutableArray *clubArray;

-(void) copyDatadaseIfNeeded;
-(NSString *) getDBPath;


@end

AppDelegate.m

@implementation ClubFindAppDelegate

@synthesize window;
@synthesize viewController;
@synthesize navigationController;
@synthesize clubArray;



#pragma mark -
#pragma mark Application lifecycle

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

[self copyDatadaseIfNeeded];
NSMutableArray *tempArray = [[NSMutableArray alloc]init];
self.clubArray = tempArray;
[tempArray release];

[Clubs getInitialDataToDisplay:[self getDBPath]];

self.window.rootViewController = self.navigationController;

[self.window addSubview:navigationController.view];
[self.window addSubview:viewController.view];
[self.window makeKeyAndVisible];

return YES;
}

DetailView.h

@class Clubs;


@interface DetailViewController : UITableViewController {
IBOutlet UITableView *tableView;
Clubs *clubObj;
}

@property (nonatomic, retain) Clubs *clubObj;
@property (nonatomic, retain) IBOutlet UITableView *tableView;


@end

DetailView.m

#import "DetailViewController.h"
#import "Clubs.h"
#import "BrowseViewController.h"


@implementation DetailViewController

@synthesize clubObj;
@synthesize tableView;


-(void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.title = clubObj.clubName;
[self.tableView reloadData];

}



-(NSString *)tableView:(UITableView *)tblView titleForHeaderInSection: (NSInteger)section {
NSString *sectionName = nil;
switch (section) {
    case 0:
        sectionName = [NSString stringWithFormat:@"Club"];
        break;
    case 1:
        sectionName = [NSString stringWithFormat:@"Address"];
        break;
}
return sectionName;

}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section     {
// Return the number of rows in the section.
return 1;
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tblView cellForRowAtIndexPath:(NSIndexPath   *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

switch (indexPath.section) {
    case 0:
        cell.textLabel.text = clubObj.clubName;
        break;
    case 1:
        cell.textLabel.text = clubObj.ClubAddress;
        break;
}

return cell;


}

更新了代码。

1 个答案:

答案 0 :(得分:1)

当您创建应用程序并想要使用UINavigationController时,您必须在AppDelegate中告诉UINavigationController是您的rootViewController。

self.window.rootViewController = self.navigationController;

当推送详细视图时,它已经(知道)它在UINavigationController中,因此您不需要创建额外的UINavigationController。

所以从.h和.m文件中删除UINavigationController *navigationController;