1

我有一个 UITableView,我使用的方式与Xamarin的本教程中演示的方式相同。

根据示例中的说明,我在方法中将 设置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是一个类变量,和 (still empty) 一样UIViewController uivc

据我了解,PresentFromRect的第一个参数确定 UIPopoverController '挂钩'到的 UIView,它需要该视图的 Frame 属性才能这样做。

不幸的是,我上面的方法不起作用。cell.AccessoryView始终为空,即使我已设置cell.AccessoryDetailDisclosureButton.

此处列出的答案表明设置cell.Accessory不影响cell.AccessoryView属性(我知道它处理的是 ObjectiveC,但我想这同样适用于 MonoTouch)。

相反,建议通过分配 a来 DetailDisclosureButton手动添加 a 。但是,这意味着我不能使用Xamarin 示例中的方法,需要创建自己的事件处理程序,等等。UIButtoncell.AccessoryViewAccessoryButtonTapped

作为替代方案,我尝试在单元格中循环Subviews,并像这样连接 popovercontroller:

uipoc.PresentFromRect (tableView.CellAt(indexPath).Subviews[1].Frame, tableView, UIPopoverArrowDirection.Right, true);

但是,使用Subviews[0]and Subviews[2],它根本不起作用,同时Subviews[1]给了我奇怪的结果 - 弹出菜单总是显示DetailDisclosureButton在表格中的第一个单元格旁边,无论点击哪个单元格的按钮。

我的问题:如果只是设置为, 有没有办法获得DetailDisclosureButton的视图(ergo,附件的视图)?cell.AccessoryUITableViewCellAccessory.DetailDisclosureButton

如果不是,后一种解决方案(UIButton手动添加)是实现我想要的唯一方法吗?如何在 C#/MonoTouch 中做到这一点?

谢谢!

4

1 回答 1

2

经过一番摆弄后,我发现了一个有点难看但可行的解决方法:

public override void AccessoryButtonTapped (UITableView tableView, NSIndexPath indexPath)
{
    uipoc = new UIPopoverController(uivc);
    uipoc.PopoverContentSize = new SizeF(200f, 300f);
    uipoc.PresentFromRect (new RectangleF(cell.Frame.Right - 40f, cell.Frame.Y, cell.Frame.Width, cell.Frame.Height), tableView, UIPopoverArrowDirection.Right, true);
}

我不需要附件的位置信息Frame,而是使用其cell自身的信息并从其右侧减去 40。这将在该单元格UIPopupViewcontroller的左侧显示DetailDisclosureButton,其箭头指向它。显然,您需要为正确的尺寸减去(或添加)40,具体取决于UIPopoverArrowDirection您选择的尺寸。

我怀疑这是正确的方法,但我想我会坚持下去,除非有人提出更好的建议。

于 2012-10-08T14:02:28.353 回答