0

まず最初に、私は iOS の分野では少し初心者だと言わざるを得ません。つまり、私の問題をさらに説明します。

ユーザーが動物のリストを取得するアプリを作成しています。ユーザーがリストから動物を選択すると --> 2 番目のビュー コントローラーが開き、選択した動物に画像ビューを設定する必要があります + 動物の説明があります。

viewController2.m の ViewDidLoad のコードのこの部分で

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.navigationItem setTitle:@"Animal"];   //here the title has to be set to the animal but I will try this later

   // Do any additional setup after loading the view from its nib.
    UIImage * cowImage = [UIImage imageNamed:@"cow.png"];
    UIImage * horseImage = [UIImage imageNamed:@"horse.png"];

    ViewController1 *viewController1 = [[ViewController1 alloc]init];

    characterNumber = viewController1.pickedRow;

    //set the uiimageview based on characternumber
    switch (characterNumber) {
        case 0:
            foto.image = pukkelpopImage;
            detailInfo.text = @"blabla";
            [self.navigationItem setTitle:characterName];
            break;
        case 1:
            foto.image = cactusImage;
            break;
        default:
            break;
    }

}

私のViewController 1.mには、アイテムが選択されたときのこのメソッドがあります。

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


    ViewController2 *ViewController22 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];

    [[self navigationController] pushViewController:ViewController22 animated:YES];

    pickedRow = indexPath.row;   //As you can see here I try to get which row was tapped


}

問題はどこにあるのでしょうか? 読んでくれてありがとう

4

1 に答える 1

1

viewController2 に viewController1 の新しいインスタンスを割り当てていますが、これは、viewController2 をプッシュしている viewController1 インスタンスとはまったく関係ありません。

選択された行を保存し、didSelectRowAtIndexPath にプッシュする前に viewController2 インスタンスの値を設定するために、viewController2 で NSInteger プロパティを宣言してみてください。

ViewController2.h でプロパティを宣言します。

@property (nonatomic) NSInteger pickedRow;

ViewController1.m didSelectRowAtIndexPath で、viewController2 インスタンスを初期化した後、プッシュする前にプロパティを設定します。

viewController2.pickedRow = indexPath.row;

ViewController2.m で viewController1 を初期化する必要はありません。

// ViewController1 *viewController1 = [[ViewController1 alloc]init];

変数 characterNumber は、self.pickedRow に置き換えることができます。

于 2013-06-06T15:51:18.933 に答える