Xamarinのこのチュートリアルで説明したのと同じ方法で使用する UITableView があります。
サンプルの指示に従って、次のようにメソッドでcell.Accessory
を aに設定します。DetailDisclosureButton
GetCell
public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
{
(Some code to create/style the cell, etc. See tutorial link.)
cell.Accessory = UITableViewCellAccessory.DetailDisclosureButton;
}
がタップされたUIPopoverController
ときに表示するようにしたいと思います。DetailDisclosureButton
そのアンカーはボタンに「添付」する必要があります。
これを行うには、次のAccessoryButtonTapped
ように、それに応じてメソッドを変更する必要があります。
public override void AccessoryButtonTapped (UITableView tableView, NSIndexPath indexPath)
{
uipoc = new UIPopoverController(uivc);
uipoc.PopoverContentSize = new SizeF(200f, 300f);
uipoc.PresentFromRect (tableView.CellAt (indexPath).AccessoryView.Frame, tableView, UIPopoverArrowDirection.Right, true);
}
Uipoc
(まだ空) と同様に、クラス変数ですUIViewController uivc
。
私が理解しているように、PresentFromRect
の最初のパラメーターは、UIPopoverController が「接続」する UIView を決定します。そのためには、そのビューの Frame プロパティが必要です。
残念ながら、上記の方法ではうまくいきません。に設定したcell.AccessoryView
にもかかわらず、常に nullです。cell.Accessory
DetailDisclosureButton
ここにリストされている回答は、プロパティにcell.Accessory
影響を与えないことを示していcell.AccessoryView
ます(ObjectiveCを扱っていることは知っていますが、MonoTouchにも同じことが当てはまると思います)。
DetailDisclosureButton
代わりに、を に割り当てて、 を手動で追加することをお勧めしUIButton
ます cell.AccessoryView
。AccessoryButtonTapped
ただし、これは、Xamarin サンプルのメソッドを使用できないこと、独自のイベント ハンドラーを作成する必要があることなどを意味します。
別の方法として、セルの を循環Subviews
させ、次のように popovercontroller を接続してみました。
uipoc.PresentFromRect (tableView.CellAt(indexPath).Subviews[1].Frame, tableView, UIPopoverArrowDirection.Right, true);
ただし、 and を使用するSubviews[0]
とSubviews[2]
、まったく機能しませんが、奇妙な結果が得られます.どのセルのボタンがタップされてもSubviews[1]
、ポップアップメニューは常にテーブルの最初のセルのすぐ隣に表示されます.DetailDisclosureButton
私の質問:が に設定されているDetailDisclosureButton
場合、 のビュー (つまり、アクセサリのビュー)
を取得する方法はありますか?cell.Accessory
UITableViewCellAccessory.DetailDisclosureButton
そうでない場合、後者のソリューション(UIButton
手動で追加)が私が望むものを達成する唯一の方法ですか? C#/MonoTouch でこれを行うにはどうすればよいですか?
ありがとう!