0

現在、各セルにさまざまなエクササイズが入力された単純なテーブル ビューである savedWorkout クラスがあります。私の現在の目標は、ユーザーが個々のエクササイズをクリックできるようにすることです。これにより、そのエクササイズに関する詳細情報で満たされた新しいビューに移動できます。

このために、新しいオブジェクトに関する詳細情報を保持する Exercise クラスを作成しました。これは可能ですか?

ここに私が書いた疑似コードがあります:

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

iPhoneプログラミングは初めてなので、これを行うための最良の方法が何であるか正確にはわかりませんが、これが最善の方法であると私は考えています。

私のエクササイズ クラスは、エクササイズ名を追跡するために NSString を保持し、異なる情報を保持するために 3 つの 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 の ExerciseName を目的の文字列に接続しました)。私はこれを間違って実装していますか?

4

2 に答える 2

0

はい、もちろん可能です。デリゲート メソッドを使用するだけです。

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

インデックスの場所に基づいてデータ ソース セルを確認します。

于 2012-04-23T00:27:15.040 に答える
0

cellForRowAtIndexPath メソッドを投稿する必要がある場合があります。従来の方法では、indexPath.row を使用して演習の配列にアクセスし、特定の演習を取得してから、特定の演習に基づいてセル プロパティを変更します。それは正しいですか?

それなら、あなたは家の途中です。

EDIT 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 に答える