我在文档中使用了SimpleDrillDown应用程序示例,该应用程序在第一个UITableView中显示锻炼名称,在第二个UITableView中显示锻炼。
我的应用位于Dropbox:http://db.tt/V0EhVcAG
我使用了故事板,有原型单元格,但是当我在模拟器中加载时,第一个UITableView不会让我点击并转到细节UITableView。披露指标V形不加载。该应用程序构建成功,没有正式错误。
我的表格视图位于导航控制器中,我的segue和prototype单元格都在故事板中相应命名。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [dataController countOfList];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"WorkoutCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
Workout *workoutAtIndex = [dataController objectInListAtIndex:indexPath.row];
cell.textLabel.text = workoutAtIndex.title;
return cell;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showExercises"]) {
NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow];
DetailViewController *detailViewController = [segue destinationViewController];
detailViewController.workout = [dataController objectInListAtIndex:selectedRowIndex.row];
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [workout.exercises count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ExerciseCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.textLabel.text = [workout.exercises objectAtIndex:indexPath.row];
return cell;
}
#import <UIKit/UIKit.h>
@class DataController;
@class SpitfireViewController;
@interface SpitfireAppDelegate : UIResponder <UIApplicationDelegate>
{
UIWindow *window;
SpitfireViewController *spitfireViewController;
DataController *dataController;
}
@property (strong, nonatomic) UIWindow *window;
@end
#import "SpitfireAppDelegate.h"
#import "SpitfireViewController.h"
#import "DataController.h"
@implementation SpitfireAppDelegate
@synthesize window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
spitfireViewController = [[SpitfireViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:spitfireViewController];
DataController *controller = [[DataController alloc] init];
spitfireViewController.dataController = controller;
[window addSubview:[navController view]];
[self.window makeKeyAndVisible];
return YES;
}
@end
答案 0 :(得分:5)
如果您有tableview单元格选择问题。
UITableViewDelegate
和UITableViewDataSource
答案 1 :(得分:1)
使用Storyboard时,通常会在“信息”标签下的“项目”设置中设置故事板文件名。在那里选择了故事板后,您基本上可以删除除return YES
方法的application:didFinishLaunchingWithOptions:
部分之外的所有内容。在故事板中为您完成了所有工作。
修改强>
您可以在此处设置故事板:
还要确保将视图控制器设置为初始视图控制器:
答案 2 :(得分:1)
我认为这是你的问题:
spitfireViewController = [[SpitfireViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:spitfireViewController];
DataController *controller = [[DataController alloc] init];
spitfireViewController.dataController = controller;
您在这里创建的spitfireViewController不是故事板中的那个,它是一个新的。您应该删除所有这些代码,因为您已经在故事板中创建的导航控制器中嵌入了spitfireViewController。你应该在它的viewDidLoad方法中为spitfireViewController设置数据控制器:
DataController *controller = [[DataController alloc] init];
self.dataController = controller;
答案 3 :(得分:-1)
你的“didSelectRowAtIndexPath”方法在哪里?
我建议将其放入然后触发[self performSegueWithIdentifier:]以使用表格单元格中的数据作为发件人来触发segue。