2012-04-16 8 views
0

Iは、ナビゲーションコントローラを有する....などのようなテーブルビュー:をクリック>
UINavigationControllerの兄弟ビューを取得するにはどうすればよいですか?

商品A>
アイテムB>
アイテムC>
アイテムD>
地図表のセルはもちろん、アイテムXの詳細ビューに移動します。マップビューは、アイテムA〜Dのピンポイントを示します。アノテーションの吹き出しには公開ボタンがあります。開示ボタンのコードは次のとおりです。

[self.navigationController popViewControllerAnimated:true]; 
//Now what??? 

ここで私がしたいのは、マップビューをポップした後、アイテムXの詳細ビューをプッシュすることです。これを行う適切な方法は何ですか?

+1

ああ良さ、私の...私はそれを考え出したと思います。開示ボタンのデリゲートをマップビューコントローラではなくテーブルビューコントローラに設定する必要がありますか?ダー。 – Bryan

答えて

0

これは、しかし...私は解決策を思いついた。私は、個々の注釈のタグ値を、テーブルビューを設定するために使用された配列のインデックスに基づいて設定しました。

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { 
//So, we clicked that disclosure button 
//TODO: This is really hacky... What is proper way to do this? 
ServicesViewController *vc = [self.navigationController.viewControllers objectAtIndex:1]; 
[vc infoButtonPressed:control.tag]; 

は}今ServicesViewControllerに、私たちはこれを行うことができます:

- (void) infoButtonPressed:(NSInteger) index { 

// decided against this first step, as graver's answer explains, it does not really make sense 
//[self.navigationController popViewControllerAnimated:false]; 

//index should be nav array index we want to push 
//so simulate a table-row click 
[self tableView:self.tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0]]; 

は}

0

あなたのアプローチは間違っています。あなたは、テーブルビューを持っている:

項目A>(クリックしたとき、詳細は項目Aのために閲覧押し)たDetailsView(A)
項目B>(クリックしたとき、詳細は項目Bのために閲覧押し)たDetailsView(B)
アイテムC>(アイテムCの詳細ビューをクリックしたとき)DetailsView(C)
アイテムD>(アイテムDの詳細ビューをクリックしたとき)DetailsView(D)
マップ> )地図表示>(開示ボタンをクリックすると、適切な項目のDetailsViewを押して、さらに深く移動する必要があります)

+0

私は尋ねていたものではなく、レスポンスを気に入っています!私はそれを理解したと思う。私の元のコメントは多かれ少なかれ私が答えに導いてくれました。私はそれを投稿します。 – Bryan

+0

しかし...それを言って、私は必要な動作が間違っていることに同意します。あなたが記述する振る舞いは、標準のiOS UIの慣習に沿ったものになります。それは仕様が求めたものではありませんでした。 – Bryan

関連する問題