如何向addTarget调用的选择器添加更多参数:action:forControlEvents:?

时间:2013-05-05 03:31:22

标签: iphone ios objective-c uibutton

按下按钮时,我想推送一个新视图,我需要将NSDictionary对象传递给新的DetailViewController,所以方法如下:

-(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对象传递给特定的视图控制器?

2 个答案:

答案 0 :(得分:1)

您可以使用:

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

然后在action方法中,传递字典:

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

答案 1 :(得分:0)

您无法向addTarget:action:forControlEvents:调用的选择器添加任何参数。您需要执行一些逻辑来从头开始创建字典,或者在displayCourseDetail:中获取对现有字典的引用。完成后,可以将其传递给initWithDictionary,方法与当前传递方法参数的方式相同。

如果没有看到更多的代码,我无法帮助你,但我想如果你在创建button时访问字典,如果移入displayCourseDetail:也会有用。 / p>

我注意到,当您制作DetailViewController时,您同时拨打initinitWithDictionary:,这很可能不正确。您应该只使用initWithDictionary: