IOS:从Block调用方法

时间:2012-08-28 08:20:18

标签: objective-c ios5 xcode4.3

实际上,我一直在研究如何从块中调用方法。 我正在尝试从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编程新手。所以任何帮助都会非常非常感激!

2 个答案:

答案 0 :(得分:3)

-addTarget:action:forControlEvents:UIControl上的一种方法。 UIButtonUISwitch等等都是UIControl的子类。但是,UIImageView不是,因此它不响应该选择器。由于您的imgView变量是UIImageView,编译器不允许您在其上调用此方法。这与从块中调用它无关,顺便说一下 - 但只能使用对象声明它们响应的方法。

希望这有帮助!

答案 1 :(得分:0)

变化:

[imgView addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];

为:

[imgView addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

(用冒号“:”字符)

因为buttonPressed有一个参数。