0

好的,首先我不得不说我在 iOS 领域有点菜鸟。也就是说,我将进一步解释我的问题。

我正在制作一个应用程序,用户可以在其中获取动物列表。当用户从列表中选择动物时->第二个视图控制器打开并且必须将那里的图像视图设置为所选动物+有动物的描述。

在我的 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 实例完全无关。

尝试在 viewController2 中声明一个 NSInteger 属性来存储选择的行并设置 viewController2 实例的值,然后再将其推送到 didSelectRowAtIndexPath 中。

在 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 回答