0

我有一个 viewController,可以说,它通过按下按钮blaVC调用另一个视图控制器。blubbVC由于有 4 个按钮,都blubbVC使用相同的 nib 调用,但内容应根据按下的按钮而有所不同blaVC(内容将从 plist 加载),我需要blubbVC知道“我已被调用,因为按钮A 被按下,所以我将从 plist 加载 objectForKey:@"button A""(可以这么说..)。

我这样称呼 blubbVC

- (IBAction) buttonA:(id)sender {
blubbVC *detailView = [[blubbVC alloc] initWithNibName:@"blubbNib" bundle:nil];
[self.navigationController pushViewController:detailView animated:YES];
[detailView release];
}

我试图通过sender,但是当我加载内容时initWithNibNamesender迟到了,内容已经加载(或尝试加载)并且我的视图保持空白。我该怎么做?

谢谢!

4

2 回答 2

1

您应该定义一个函数,该函数在初始化后接受设置所有状态的发送者(或表示按下哪个按钮的某个值)。

例如:

[detailView setupContent:(id)sender];

当您初始化视图控制器时,它尚未显示。在你调用 pushViewController 之前,调用新函数,这样你就有:

- (IBAction) buttonA:(id)sender {
    blubbVC *detailView = [[blubbVC alloc] initWithNibName:@"blubbNib" bundle:nil];
    [detailView setupContent:sender];
    [self.navigationController pushViewController:detailView animated:YES];
    [detailView release];
}

如果确实为时已晚(您需要 'initWithNibName' 中的数据),则定义您自己的-[initWithNibName: andSender:]或类似的东西,并[super initWithNibName:]在设置其余状态之前调用。

于 2011-05-26T18:14:57.217 回答
0

您需要在视图控制器中创建一个自定义的 init 方法。就像是:

+(id)initWithCaller:(NSString*)caller
{
    if(self == [super initWithNibName:@"blubbNib" bundle:nil]) 
    {
      calledFrom = x;
    }
    return self;
}

那只是从记忆中打字,所以可能会有一些错误。然后,您将在 IBActions 中使用该新的 init 方法

于 2011-05-26T18:17:53.817 回答