我正在使用预先存在的xcode项目来查找检索flickr图片的iPhone应用程序。我想添加一个喜欢的按钮,以便用户可以将照片添加到收藏夹数组中,但我很难过,因为我以前从未以编程方式创建过UI对象。
以下是我的按钮的代码,但是如何添加方法呢?此外,此方法定义将在何处进行?
// Create favorites button
UIButton *favButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
favButton.frame = CGRectMake(200, 50, 100, 50);
[favButton setTitle:@"Favorite" forState:UIControlStateNormal];
favButton.backgroundColor = [UIColor clearColor];
[favButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal ];
UIImage *buttonImageNormal = [UIImage imageNamed:@"blueButton.png"];
UIImage *strechableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[favButton setBackgroundImage:strechableButtonImageNormal forState:UIControlStateNormal];
UIImage *buttonImagePressed = [UIImage imageNamed:@"whiteButton.png"];
UIImage *strechableButtonImagePressed = [buttonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[favButton setBackgroundImage:strechableButtonImagePressed forState:UIControlStateHighlighted];
[favButton addTarget:self action:@selector(playAction:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:favButton];
addTarget方法是否可以添加方法?因为无论何时我点击按钮,它都会将我发回xcode并向我显示main.m文件,并突出显示以下代码行:
int retVal = UIApplicationMain(argc, argv, nil, nil);
抱歉,我对此完全陌生。该项目包含以下文件:
JSONFlickrAppDelegate.h
JSONFlickrAppDelege.m
JSONFlickrViewController.h
JSONFlickrViewController.m
ZoomedImageView.h
ZoomedImageView.m
这是我正在处理的xcode项目: http://compsci.cis.uncw.edu/~pattersone/courses/275/resources/JSONFlickrPart3.zip
答案 0 :(得分:4)
是的,这是添加方法的方法:
[favButton addTarget:self action:@selector(playAction:) forControlEvents:UIControlEventTouchUpInside];
然而,将要调用的方法是playAction:
。无论addTarget之后的是什么,只是对象将调用方法,在self的情况下,它就是创建它所在的对象的对象。
答案 1 :(得分:2)
看起来有一些关于如何将目标添加到方法的混淆。
addTarget方法是添加方法的方法吗?
是的,你是对的。 addTarget
方法是添加与按钮关联的方法的方法,方法定义应该写在提到addTarget
param的类上(在本例中为self
,这是一个当前类的对象)。
当您使用此行时,
[favButton addTarget:self action:@selector(playAction:) forControlEvents:UIControlEventTouchUpInside];
这意味着您要将一个名为playAction:
的方法添加到按钮中,该按钮应在self
事件中在目标UIControlEventTouchUpInside
中执行,即,当用户点击内部时发生事件按钮。因此,动作playAction
应该位于由对象self
表示的类中,即您在其中编写上述[favButton addTarget:...
行的类。您可以使用类似的addTarget
行向同一按钮添加任意数量的目标。
但是如何添加方法呢?此外,这种方法在哪里 定义去?
在这种情况下,您需要在同一个类中定义方法playAction:
,因为您将目标添加为self
。这可以更改为任何类的任何对象,并且该方法可以写在该类中。
例如: -
- (void)playAction:(id)button {
//write the required code here, button is same as the favbutton which is written above.
}
因为无论何时我点击按钮,它都会将我发回xcode并向我显示main.m 文件并突出显示以下代码:
它返回xcode并显示main.m
的原因是因为您没有在班级中提供任何playAction:
方法,因此崩溃了。由于它无法在目标self
中找到任何此类方法,因此会崩溃,有时它只会指向main.m
类。
您还可以按如下方式添加目标
[favButton addTarget:self action:@selector(playAction) forControlEvents:UIControlEventTouchUpInside];//notice that it is 'playAction' and not 'playAction:' with a colon at the end.
在这种情况下,您的方法将如下所示,
- (void)playAction {
//write the required code here
}
这些只是不同的方法。