Как сообщить ожидающему viewController, по какой кнопке он был вызван - PullRequest
0 голосов
/ 26 мая 2011

У меня есть viewController, скажем, blaVC, который вызывает другой контроллер представления blubbVC через нажатие кнопки.Поскольку есть 4 кнопки, все они вызывают blubbVC с одним и тем же пером, но содержимое должно варьироваться в зависимости от того, какая кнопка была нажата в blaVC (содержимое будет загружено из списка воспроизведения), мне нужно blubbVC, чтобы знать "Мне позвонили, потому что была нажата кнопка A, поэтому я загружу из списка с помощью 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, но когда я загружаю контент в initWithNibName, sender приходит поздно, контент уже загружен (или попытался)и мой взгляд остается пустым.Как бы я это сделал?

Спасибо!

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Вы должны определить функцию, которая сообщает об отправителе (или некотором значении, представляющем, какая кнопка была нажата), который устанавливает все состояние после его инициализации.

Например:

[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:] перед настройкой остальной части состояния.

0 голосов
/ 26 мая 2011

Вам необходимо создать собственный метод init в вашем контроллере представления. Что-то вроде:

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

Это просто печатать по памяти, поэтому могут быть некоторые ошибки. Затем вы будете использовать этот новый метод init в своих IBActions

...