右側のアクセサリ ビューとしてボタンを持つ注釈付きの mapView があります。注釈の詳細が表示されたらすぐにボタンを押すと、必要な情報をダウンロードするのに十分な時間がなかったため、詳細が空に見えます。私が求めているのは、その情報がダウンロードされている限り、アクティビティ インジケーターを表示することです。これが私が今まで持っているものです:
-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation{
popButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 31, 31)];
[popButton addTarget:self action:@selector(button:) forControlEvents:UIControlEventTouchUpInside];
activityI = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 31, 31)];
[activityI startAnimating];
[popButton addSubview:activityI];
[NSThread detachNewThreadSelector:@selector(threadInfo:) toTarget:self withObject:annotation];
.
.
.
annView.rightCalloutAccessoryView = popButton;
}
-(void) threadInfo: (MKAnnotationView*) info{
while ([activityI isAnimating]) {
if (ok ==0) {
}
else{
NSLog(@"ok = %i",ok);
popButton = (UIButton*) info.rightCalloutAccessoryView; <--error*
popButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
[activityI removeFromSuperview];
[activityI stopAnimating];
ok=0;
}
}
}
ここで、「ok」 = 整数、1 = ダウンロード プロセスが正常に完了したとき
エラー = キャッチされない例外 'NSInvalidArgumentException' によるアプリの終了、理由: '-["注釈クラス名" rightCalloutAccessoryView]: 認識されないセレクターがインスタンス 0x17e7fc60 に送信されました'
ボタンをコメントアウトしても、アクティビティはクラッシュせずにアニメーション化されます..
更新:(コメントアウトされたものはすべてテストされ、機能していません-必ずしも同時にではありません。コメントされていないものはすべて私の最後の試みでした)...
-(void) threadInfo: (MKAnnotationView*) annView{
UIButton* popButtons = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 31, 31)];
act = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 31, 31)];
[act setColor:[UIColor greenColor]];
[act startAnimating];
[popButtons addSubview:act];
while ([act isAnimating]) {
if (ok ==0) {
NSLog(@"ok = %i",ok);
}
else{
NSLog(@"ok = %i",ok);
// popButton = (UIButton*) annView.rightCalloutAccessoryView;
//UIButton* popButtons = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 31, 31)];
popButtons = [UIButton buttonWithType:UIButtonTypeInfoLight];
// UIActivityIndicatorView *currentActivityIndicator = (UIActivityIndicatorView *)[popButton viewWithTag:15];
//currentActivityIndicator.hidden = YES;
//[popButtons addSubview:[(UIActivityIndicatorView*) [popButton viewWithTag:15]]];
// [(UIActivityIndicatorView *) [popButton viewWithTag:15] stopAnimating];
// [(UIActivityIndicatorView *) [popButton viewWithTag:15] removeFromSuperview];
annView.rightCalloutAccessoryView = popButtons;
//[popButton addSubview:popButtons];
// NSLog(@"view = %@",[popButton viewWithTag:15]);
//[act stopAnimating];
// [currentActivityIndicator stopAnimating];
// [currentActivityIndicator removeFromSuperview];
// popButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
//ok=0;
}
}
}