1

実際、私はブロックからメソッドを呼び出す方法を見回してきました。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で、「'UIImageView'の表示された@interfaceがセレクター'addTarget:action:forControlEvents'を宣言していません」というメッセージが表示されます。

私はiOSプログラミングに不慣れです。ですから、どんな助けでも非常にありがたいです!

4

2 に答える 2

3

-addTarget:action:forControlEvents:のメソッドUIControlです。UIButton、、UISwitchなどはすべて。のサブクラスですUIControlUIImageViewただし、そうではないため、そのセレクターには応答しません。imgView変数はであるためUIImageView、コンパイラーはこのメソッドを呼び出すことを許可しません。これは、ブロックから呼び出すこととは関係ありませんが、オブジェクトが応答すると宣言するメソッドとのみ関係があります。

お役に立てれば!

于 2012-08-28T08:24:53.310 に答える
0

変化する:

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

に:

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

(コロン「:」文字付き)

buttonPressedには引数があるためです。

于 2012-08-28T08:27:39.957 に答える