2

我按照文档中的 SimpleDrillDown 应用程序示例进行了锻炼应用程序,该应用程序在第一个 UITableView 中显示锻炼名称,在第二个 UITableView 中显示锻炼。

我的应用程序在 Dropbox 中:http: //db.tt/V0EhVcAG

我使用了故事板,有原型单元,但是当我在模拟器中加载时,第一个 UITableView 不会让我点击并转到详细的 UITableView。披露指标 V 形不加载。该应用程序成功构建并且没有正式错误。

我的 tableviews 在导航控制器中,我的 segue 和原型单元格都在故事板中相应地命名。

SpitfireViewController.m

- (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];
    }
}

细节视图控制器.m

- (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;
}

AppDelegate.h

#import <UIKit/UIKit.h>
@class DataController;
@class SpitfireViewController;

@interface SpitfireAppDelegate : UIResponder <UIApplicationDelegate>
{
    UIWindow *window;
    SpitfireViewController *spitfireViewController;
    DataController *dataController;
}

@property (strong, nonatomic) UIWindow *window;

@end

AppDelegate.m

#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

我的故事板 SpitfireViewController (根) 细节视图控制器

4

4 回答 4

5

如果您有 tableview 单元格 segue 选择问题。

启用了选择的 Tableview

  • 您需要首先检查您的表格视图是否允许选择
  • 您不需要实现UITableViewDelegateUITableViewDataSource使用“静态单元格”时
  • 您需要为辅助动作添加一个转场 + 为选择添加一个转场。

一个用于表格视图选择的 segue 另一个用于辅助操作

于 2013-12-27T14:56:40.500 回答
1

使用 Storyboards 时,您通常会在信息选项卡下的项目设置中设置故事板文件名。一旦你在那里选择了你的故事板,你基本上可以删除除方法return YES部分之外的所有内容application:didFinishLaunchingWithOptions:。这一切都在情节提要中为您处理好了。

编辑:

这是您设置情节提要的地方:

设置主故事板

还要确保您的视图控制器设置为初始视图控制器:

设置初始视图控制器

于 2013-04-24T02:32:11.560 回答
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;
于 2013-04-24T03:54:18.663 回答
-1

您的“didSelectRowAtIndexPath”方法在哪里?

我建议将其放入然后触发 [self performSegueWithIdentifier:] 以使用表格单元格中的数据作为发送者来触发 segue。

于 2013-04-24T02:49:43.207 回答