实际上,我一直在研究如何从块中调用方法。 我正在尝试从iphone照片应用程序中获取所有图像。这是代码....
void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop)
if(group != nil) {
[self.groups addObject:group];
[group enumerateAssetsUsingBlock:selectionBlock];
}
};
[library enumerateGroupsWithTypes:groupTypes
usingBlock:assetGroupEnumerator
failureBlock:^(NSError *error) {NSLog(@"A problem occurred");}];
在selectionBlock中......我只想在用户点击任何图片时添加动作。 所以我尝试了这段代码..
[imgView addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
buttonPressed也在同一个.m文件中定义。
- (void) buttonPressed: (id) sender {
UIAlertView* av = [[UIAlertView alloc] initWithTitle:@"Howdy!"
message:@"You tapped me."
delegate:nil
cancelButtonTitle:@"Cool"
otherButtonTitles:nil];
[av show];
}
但是在selectionBlock中我得到“没有可见的@interface为'UIImageView'声明了选择器'addTarget:action:forControlEvents'”
我是iOS编程新手。所以任何帮助都会非常非常感激!
答案 0 :(得分:3)
-addTarget:action:forControlEvents:
是UIControl
上的一种方法。 UIButton
,UISwitch
等等都是UIControl
的子类。但是,UIImageView
不是,因此它不响应该选择器。由于您的imgView
变量是UIImageView
,编译器不允许您在其上调用此方法。这与从块中调用它无关,顺便说一下 - 但只能使用对象声明它们响应的方法。
希望这有帮助!
答案 1 :(得分:0)
变化:
[imgView addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
为:
[imgView addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
(用冒号“:”字符)
因为buttonPressed有一个参数。