2013-05-05 2 views
0

Когда кнопка нажата, я хочу, чтобы подтолкнуть новое представление, и мне нужно передать NSDictionary объект нового DetailViewController, поэтому метод выглядит следующим образом:Как добавить дополнительные параметры в селектор, вызванный addTarget: action: forControlEvents :?

-(void)displayCourseDetail:(NSDictionary*)dictionary{ 
    self.detailViewController = [[[DetailViewController alloc]init]initWithDictionary:dictionary]; 
    [self presentViewController:detailViewController animated:YES completion:nil]; 
} 

Но я не знаю, как передать NSDictionary этим:

[button addTarget:self action:@selector(displayCourseDetail:) forControlEvents:UIControlEventTouchUpInside]; 

кнопка была создана в коде, потому что это динамический.

UIButton *button=[UIButton buttonWithType:UIButtonTypeCustom]; 
button.frame=CGRectMake(_StartX+day*_ButtonWidthWorkday, _StartY+course*_ButtonHeightNormal, _ButtonWidthWorkday-_ButtonMargin, _ButtonHeightNormal-_ButtonMargin); 

Как я могу передать NSDictionary объект конкретного контроллера вида при нажатии кнопки?

ответ

1

Вы можете использовать:

[button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 

Затем в методе действия, передать словарь:

-(IBAction) buttonClicked:(id)sender{ 
    ... 
    [self performSelector:@selector(displayCourseDetail:) withObject:yourDictionary]; 
} 
+0

Очень благодарю вас. производитсяSelector: withObject: можно сделать работа. – Piner

0

Вы не можете добавить параметры к селектору наречено addTarget:action:forControlEvents:. Вам нужно сделать некоторую логику для создания словаря с нуля или получить ссылку на существующий в displayCourseDetail:. После этого вы можете передать его initWithDictionary так же, как вы в данный момент передаете аргумент метода.

Я не могу помочь вам, не видя намного больше вашего кода, но я бы предположил, что, несмотря на то, что вы обращаетесь к словарю при создании button, он будет работать, если он будет перемещен в displayCourseDetail:.

Я заметил, что когда вы делаете DetailViewController, вы вызываете как init, так и initWithDictionary:, что весьма вероятно не так. Вы должны использовать только initWithDictionary:.

+0

Ya, u'r right.I @property Ссылка на объект NSDictionary на текущий, и передача его в displayCourseDetail:, все сделано. – Piner

+0

Я пытаюсь использовать initWithDictionary: только, но он не может работать. Я думаю, что UIViewController не имеет этого метода, я не могу переопределить. – Piner

+0

'UIViewController' определенно не имеет этого метода, я предположил, что вы внедрили его самостоятельно в' DetailViewController'. – jszumski

Смежные вопросы