0

目前,我有一个 savedWorkout 类,它只是一个表格视图,在每个单元格中填充了不同的练习。我现在的目标是让用户能够单击每个单独的练习,这将带您进入一个包含有关它的详细信息的新视图。

为此,我创建了一个练习类,它将保存有关新对象的详细信息。这可能吗?

这是我写的一些伪代码:

if (Table View Cell's Text == ExerciseObject.exerciseName) {
Populate a view with the corresponding information;
}

作为 iPhone 编程的新手,我不确定什么是最好的方法,这就是我认为最好的方法。

我的练习类包含一个 NSString 来跟踪练习名称,以及三个 NSMutableArray 来保存不同的信息。

如果我朝着正确的方向前进,请告诉我。

编辑:

在尝试实现我的伪代码之后,这就是我想出的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    Exercise *exerciseView = [[Exercise alloc] initWithNibName:@"Exercise" bundle:nil]; //Makes new exercise object.

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *str = cell.textLabel.text; // Retrieves the string of the selected cell.

    exerciseView.exerciseName.text = str;

    [self presentModalViewController:exerciseView animated:YES];
}

但是,这似乎不起作用。当新视图出现时,标签不显示(我将 UILabel 练习名称连接到我想要的字符串)。我执行这个错误吗?

4

2 回答 2

0

是的,当然有可能。只需使用委托方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath; 

并根据索引位置检查您的数据源单元格。

于 2012-04-23T00:27:15.040 回答
0

您可能需要发布您的 cellForRowAtIndexPath 方法。如果按照传统方式完成,它使用 indexPath.row 访问练习数组以获取特定练习,然后根据特定练习更改单元格属性。这对吗?

就是这样,那你就到了半路。

编辑 1) 使用您的 cellForRowAtIndex 路径中的代码初始化您的 str,如此处所示。2) 新的视图控制器视图尚未构建。在 VC 准备好之前,您不能在视图层次结构中初始化子视图。您需要将字符串传递给该视图控制器中的属性(如果需要,可以在自定义 init 方法中),然后在该类的 viewDidLoad 上,您可以将 exerciseName 字段设置为您之前保存的字符串属性。该子视图不应该是类公共接口的一部分。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // There should be an array of exercises, the same one used in cellForRowAtIndexPath:
    NSString *str = [self.myArrayOfExercises objectAtIndex:indexPath.row];
    // Just made code up here, but however you get a string to place in the cell
    // in cellForRowAtIndexPath do that same thing here.

    Exercise *exerciseView = [[Exercise alloc] initWithNibName:@"Exercise" bundle:nil];
    // Might be wise to rename this ExerciseViewController, since it's probably (hopefully) a ViewController subclass

    // no need to get a table cell, you have the info you need from your exercise array
    //UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    //NSString *str = cell.textLabel.text; // Retrieves the string of the selected cell.

    exerciseView.exerciseName.text = str;

    [self presentModalViewController:exerciseView animated:YES];
}
于 2012-04-23T02:08:03.897 回答