我有一个基于视图的应用程序,它有一个主菜单。在主菜单中,用户可以选择一个选项,该选项显示从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;
}
更新了代码。
答案 0 :(得分:1)
当您创建应用程序并想要使用UINavigationController时,您必须在AppDelegate中告诉UINavigationController是您的rootViewController。
self.window.rootViewController = self.navigationController;
当推送详细视图时,它已经(知道)它在UINavigationController中,因此您不需要创建额外的UINavigationController。
所以从.h和.m文件中删除UINavigationController *navigationController;
。