Xamarinのこのチュートリアルで説明したのと同じ方法で使用する UITableView があります。
サンプルの指示に従って、次のようにメソッドでcell.Accessoryを aに設定します。DetailDisclosureButtonGetCell
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.AccessoryDetailDisclosureButton
ここにリストされている回答は、プロパティに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.AccessoryUITableViewCellAccessory.DetailDisclosureButton
そうでない場合、後者のソリューション(UIButton手動で追加)が私が望むものを達成する唯一の方法ですか? C#/MonoTouch でこれを行うにはどうすればよいですか?
ありがとう!