如何通过调用哪个按钮告诉即将到来的viewController

时间:2011-05-26 18:04:15

标签: iphone objective-c uiviewcontroller sender

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

我称之为blubbVC

blubbVC

我尝试传递- (IBAction) buttonA:(id)sender { blubbVC *detailView = [[blubbVC alloc] initWithNibName:@"blubbNib" bundle:nil]; [self.navigationController pushViewController:detailView animated:YES]; [detailView release]; } ,但是当我加载sender中的内容时,initWithNibName来得很晚,内容已经加载(或尝试过),我的视图仍为空。我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:1)

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

例如:

[detailView setupContent:(id)sender];

初始化视图控制器时,它尚未显示。在调用pushViewController之前,请调用new函数,因此您需要:

- (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:]状态。

答案 1 :(得分:0)

您需要在视图控制器中创建自定义init方法。类似的东西:

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

这只是从内存中键入,因此可能存在一些错误。然后,您将在IBActions中使用新的init方法