2

我正在使用用于检索 flickr 图片的 iPhone 应用程序的预先存在的 xcode 项目。我想添加一个收藏按钮,以便用户可以将照片添加到收藏夹数组中,但我很难过,因为我以前从未以编程方式制作 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

4

2 回答 2

4

是的,这是添加方法的方法:

[favButton addTarget:self action:@selector(playAction:) forControlEvents:UIControlEventTouchUpInside];

但是,将调用的方法是playAction:. addTarget 之后的任何内容都只是将调用该方法的对象,在 self 的情况下,它位于其中创建此按钮的对象。

于 2012-11-17T00:55:54.280 回答
2

看起来您需要如何将目标添加到方法中存在一些混淆。

addTarget 方法是添加方法的方法吗?

是的,你是对的。addTarget方法是添加与按钮关联的方法的方法,方法定义应该写在作为addTarget参数提到的类上(在这种情况下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
}

这些只是不同的方法来做到这一点。

有关更多详细信息,请查看此苹果文档。

于 2012-11-17T01:35:22.000 回答