ユーザーがGPSによってローカライズされ、特定の場所にいるかどうかを尋ねられるアプリを開発しています。これを確認するために、吹き出しがすぐに表示され、特定の場所にいるかどうか尋ねられます。
同様の質問がたくさんあるので、カスタム吹き出しバブルを作成できました。
私の問題: ボタンは「クリック可能」ではありません 私の推測: このカスタム コールアウトは標準のコールアウト バブルよりも高いため、負の「フレーム」に配置する必要があったため、ボタンをクリックできません。これが私のdidSelectAnnotationView
方法です
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
if(![view.annotation isKindOfClass:[MKUserLocation class]]) {
CalloutView *calloutView = (CalloutView *)[[[NSBundle mainBundle] loadNibNamed:@"callOutView" owner:self options:nil] objectAtIndex:0];
CGRect calloutViewFrame = calloutView.frame;
calloutViewFrame.origin = CGPointMake(-calloutViewFrame.size.width/2 + 15, -calloutViewFrame.size.height);
calloutView.frame = calloutViewFrame;
[calloutView.calloutLabel setText:[(MyLocation*)[view annotation] title]];
[calloutView.btnYes addTarget:self
action:@selector(checkin)
forControlEvents:UIControlEventTouchUpInside];
calloutView.userInteractionEnabled = YES;
view.userInteractionEnabled = YES;
[view addSubview:calloutView];
}
}
CalloutView は、2 つのプロパティ (場所とボタンの名前を示すラベル) と xib を持つ単純なクラスです。
私はこのカスタム コールアウト バブルを数日間実行しています。「非同期ソリューション」ソリューションを使用してみましたが、他の種類のボタンと開示ボタンを追加できませんでした。
私の次の試みは、非同期ソリューションよりも簡単なものを見つけて、それを自分の用途に合わせて変更することでした。それがtochi's custom calloutを見つけた方法です。
彼の仕事に基づいて、私は彼の吹き出しをカスタマイズし、カスタム ボタンの情報ボタンを変更することができました。しかし、私の問題は同じままでした。カスタムの吹き出しビューをピンの上に配置するには、負のフレームを指定する必要があったため、ボタンは下の 5 ピクセルでのみ「クリック可能」になりました。iOSのデフォルトのコールアウトバブルをさらに掘り下げ、サブクラス化し、そこでコールアウトのフレームを変更する必要があるようです。でも今は本当に絶望的です。
正しい方法を教えていただけるか、アドバイスをいただければ幸いです。