【发布时间】:2012-10-07 12:56:58
【问题描述】:
我有一个 UITableView,我使用的方式与 Xamarin 的 this tutorial 中演示的方式相同。
根据示例中的说明,我在GetCell 方法中将cell.Accessory 设置为DetailDisclosureButton,如下所示:
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。
答案listed here 表示设置cell.Accessory 不会影响cell.AccessoryView 属性(我知道它处理ObjectiveC,但我想这同样适用于MonoTouch)。
建议通过将UIButton分配给cell.AccessoryView来手动添加DetailDisclosureButton。但是,这意味着我不能使用 Xamarin 示例中的 AccessoryButtonTapped 方法,需要创建自己的事件处理程序,等等。
作为替代方案,我尝试通过单元格的 Subviews 循环,并像这样连接 popovercontroller:
uipoc.PresentFromRect (tableView.CellAt(indexPath).Subviews[1].Frame, tableView, UIPopoverArrowDirection.Right, true);
但是,使用Subviews[0] 和Subviews[2],它根本不起作用,而Subviews[1] 给了我奇怪的结果——弹出菜单总是显示在表格中第一个单元格的DetailDisclosureButton 旁边,没有无论点击哪个单元格的按钮。
我的问题:
如果只是将cell.Accessory 设置为UITableViewCellAccessory.DetailDisclosureButton,有没有办法获得DetailDisclosureButton 的视图(ergo,附件的视图)?
如果不是,后一种解决方案(手动添加UIButton)是实现我想要的唯一方法吗?如何在 C#/MonoTouch 中做到这一点?
谢谢!
【问题讨论】:
-
您需要弄清楚为什么
AccessoryButtonTapped不起作用。与 Xamarin 示例有什么不同?如果您在UITableViewCell上设置了Accessory,而不是None,那么它应该会触发该消息。如果您运行 Xamarin 示例,它是否适合您? -
@jonathanpeppers
AccessoryButtonTapped有效,我对 Xamarin 示例没有任何问题。我的问题是,仅将cell.Accessory中的UITableViewCellAccessory.DetailDisclosureButton设置为GetCell不会在任何地方公开附件的视图。cell.AccessoryView始终为 null,并且似乎与我为cell.Accessory选择的任何类型无关。不过,我确实需要配件的视图,以便将 UIPopoverController 连接到它。 -
您可以只使用
RectangleF来显示弹出框,您知道吗? -
@jonathanpeppers 是的,但这不会让我显示 UIPopupViewcontroller 的箭头指向 DetailDisclosureButton,因为我不知道按钮的位置。你的评论确实给了我一个想法:)。见下文。
标签: xamarin.ios uipopovercontroller monotouch.dialog uitableview