2011-09-13 4 views
1

でないときにiphone UIButtonセレクタが機能しない多くのさまざまな方法を試しましたが、自分のコードで何が問題なのかわかりません。フレームの起点が0,

マップ上のピンをクリックすると表示されるカスタムのコールアウトバブルを作成し、バブルの中のいくつかのイメージを表示します。ユーザーがクリックして詳細情報にアクセスできるようにdetaildisclosureボタンが必要です。私の問題は、バブルとボタンが表示されているが、ボタンのクリックがセレクタメソッドと呼ばれていないことです。

//編集:申し訳ありませんが、私はあまりにも多くのコードを入れて初めて、私はこの方法では

、より具体的にはあなたの答えに感謝をしようとして編集しますので:

- (id) initWithAnnotation:(id)annotation reuseIdentifier:(NSString *)reuseIdentifier 

まず私の代わりに、通常のピンのカスタムアイコンを変更するには、ImageViewの

self = [super initWithAnnotation:myAnnotation reuseIdentifier:reuseIdentifier]; 
self.frame = CGRectMake(0, 0, kWidth, kHeight); 
self.backgroundColor = [UIColor clearColor]; 

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon.png"]]; 
imageView.frame = CGRectMake(kBorder, kBorder, kWidth - 2 * kBorder, kWidth - 2 * kBorder); 
[self addSubview:imageView]; 

私はサブビューとして追加し、バブル吹き出しをカスタマイズすると同時に、私はいくつかのラベルとイメージを作成し、Iを示し私はテキストに丸みを帯びた矩形の背景とサイズを作成、ピンの選択方法は、その後

calloutView = [[UIView alloc] initWithFrame:CGRectMake(10, 30, restNameLbl.frame.size.width + 30, 60)]; 
    calloutView.hidden = YES; 

と呼ばれるまで、それは最初に隠されていること、ビューcalloutViewにdded私がいないので、私はコードのその部分を除外それは今重要だと思う、私はそれを置く必要があるなら、私に知らせて、私はデフォルトのiphoneバブルマップsytleをシミュレートするために、一部のグラフィックス機能を使用

そして私はcalloutViewの前に作成されたすべての要素を追加します。

[calloutView addSubview:backgroundRect];   
[calloutView addSubview:restNameLbl];   
[calloutView addSubview:likeImg]; 
[calloutView addSubview:likesLbl]; 
[calloutView addSubview:noLikeImg]; 
[calloutView addSubview:noLikesLbl]; 

そして、私はその場所を正しい場所に置く

//position callout above pin 
calloutView.frame = CGRectMake(-25, -calloutView.frame.size.height-10, calloutView.frame.size.width + 50, calloutView.frame.size.height);  
[self addSubview:calloutView]; 

と同じバブルビューで - calloutViewと呼ばれる私は、ユーザーがより多くの情報にアクセスできるように詳細開示ボタンを表示したいが、私はcalloutViewに直接追加した場合、セレクタのイベントがトリガされることはありません。だから私は、それが親ビューにボタンを追加することだという異なった方法でそれを実行しようとしましたyesにその隠された状態を入れて、セレクタ方式

accessory = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
[accessory setTitle:myAnnotation.idRest forState:UIControlStateNormal]; 
accessory.hidden= YES; 

// NOTE上でそれを示しています。ここでは、次の場合に問題です私はこのフレームラインを残して、すべてが完璧に動作するか、origin.xとorigin.yを0,0に設定しても、ビューの正しい場所に表示するように番号を変更したときにボタンセレクターが機能しなくなる

accessory.frame = CGRectMake(110, calloutView.frame.origin.y+25, accessory.frame.size.width, accessory.frame.size.height); 

次に、クリックしたときに呼び出されるselectorイベントを追加します。calloutAccessoryTapという関数が呼び出されるのは、付属のフレームorigin.xとyの両方が0

accessory.userInteractionEnabled = YES; 
[accessory addTarget:self action:@selector(calloutAccessoryTap) forControlEvents: UIControlEventTouchUpInside | UIControlEventTouchCancel]; 

そして最後に設定されている場合、私が最初に表示したばかりであるメインビューに

[self addSubview:accessory]; 

をボタンを追加して示されているかいませんラベルと画像を含む吹き出しビューは非表示になり、詳細ボタンにも同様のことが起こり、ピンが選択され、吹き出しを表示する必要があるときに、吹き出しビューとボタンが表示されます。すべてが画面上に見えますが、付属品のフレームが原点xとy 0,0とは異なる良好な位置に設定されていると、セレクタは機能しなくなります。

私は多くの異なることを試みたが、どれも働いていなかったので、助けてくれることを願っています。

+2

あなたはちょうどコードをトリミングできますか?あまりにも多くの...問題を説明し、問題を引き起こしていると思われるコード。そのコードをすべて解決して解決策を見つけるのは難しいです。 – lukya

答えて

1

私はちょうどあなたにポインタを与えるでしょうので、コードを通過するのは時間がかかります。 UIButton "accessory"の上にサブビューを追加していますか?はいの場合、もちろんボタンはタップを検出しません。サブビューが互いに重ねて追加されるので、透明なビューをボタンの上に置くと効果的に無効になります。

+0

アクセサリ最後のものがビューに追加されているので、それは問題だとは思っていません。そのフレームが0,0に設定されていると、ピン位置に描画され、すべてが動作していますが、情報が入ったバブルの内側に表示される画面上セレクタが機能しなくなる – nirvik

+0

バブルは何ですか?そして、「バブルの中に入っている」というのはどういう意味ですか? – tipycalFlow

+0

opps、申し訳ありませんが、私はそれがそのように呼ばれたと思いました!私はバブルを、マップのピンをクリックすると表示されるというビューに呼びます。デフォルトではイメージ、タイトル、サブタイトルがあります。しかし、私はそれをカスタマイズしたいと思うので私は自分自身でそれを作成します - それはコード上のコールアウトビューです - 。バブルの内側に表示するには、バブルの右中程度のサイズにアクセサリボタンを配置するために、そのようなもののタイトルの上にではなく、ビューの内側に見栄えのよい場所を置くことを意味します。 – nirvik

関連する問題