注釈付きの MKMapView (UIPopoverControllerDelegate でもあります) があります。この MapView には、MKTestMapView.hファイルで、@interface でUIPopoverController* popoverController
定義された と@property (nonatomic, retain) UIPopoverController* popoverController;
、セクションの外側で定義された があり@interface
ます。このコントローラーは@synthesized
MKTestMapView.mファイルにあり、- (void)dealloc
セクションで公開されています。この MapView の Annotations にはrightCalloutAccessoryView
、次のものが定義されています。
- (void)mapView:(MKMapView *)mapView2 annotationView:(MKAnnotationView *)aview calloutAccessoryControlTapped:(UIControl *)control{
...
CGPoint leftTopPoint = [mapView2 convertCoordinate:aview.annotation.coordinate toPointToView:mapView2];
int boxDY=leftTopPoint.y;
int boxDX=leftTopPoint.x;
NSLog(@"\nDX:%d,DY:%d\n",boxDX,boxDY);
popoverController = [[UIPopoverController alloc] initWithContentViewController:controller];
popoverController.delegate = self;
CGSize maximumLabelSize = CGSizeMake(320.0f,600.0f);
popoverController.popoverContentSize = maximumLabelSize;
CGRect rect = CGRectMake(boxDX, boxDY, 320.0f, 600.0f);
[popoverController presentPopoverFromRect:rect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];
...
}
ここからが楽しい部分です。まず、 と を同じサイズにする必要があるかどうかわかりませmaximumLabelSize
んrect
。私はpopovercontrollerが初めてなので、これを耳で演奏しています..
さて、ポップオーバーが表示されます。今それを却下します。mapView2 の任意の場所をクリックすると、ポップオーバーが消えます...しかし、ユーザーが何かを変更した場合は、ビューのボタンをクリックする必要があります。うーん!
ドキュメントは次のことを示しています。
プログラムでポップオーバーを閉じるには、ポップオーバー コントローラーの DismissPopoverAnimated: メソッドを呼び出します。
さて、ここに問題があります: popoverController がどのように機能するかの定義により、表示されたポップオーバーのビュー内をクリックする (ボタンをクリックする) ことになりますが、このポップオーバー ビューを起動dismissPopoverAnimated:
したコントローラーのメソッドをトリガーする必要があります。 MKTestMapView.mファイル内。popoverController
さて、すべてのことを言いましたが、覚えておいて[popoverController release]
ください。
- (void)dealloc {
[popoverController release];
[mapView release];
[super dealloc];
}
だから、ボタンの中で次のことをするだけですか(面倒ですが、うまくいくかもしれません):
(私のポップオーバービューがTableViewであると仮定します)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
MKTestMapView * mKTestMapView = [[MKTestMapView alloc] init];
[[mKTestMapView popoverController].dismissPopoverAnimated:YES];
}
ここに私の問題があります:上記のことを行うと、画面上にある既存のビューにreference
(そのようなことがある場合)、つまりその popoverController の所有者であるビューが表示されるかどうかわかりません。それが同じくらい簡単であれば
[[[self parentView] popoverController].dismissPopoverAnimated:YES];
それも正しい構文ではないと思うので、私は自分自身を撃ちます!
これは簡単なはずですが、道に迷っています。(おそらく、私が学んでいるほど多くの iPad の違いに不満を感じているだけでしょう)。
誰かもっと説明できますか?