У меня есть табличный вид, и я использую UITableViewRowAction
, чтобы представить два варианта пользователю, когда салфетки сделаны в строке, «удалить» и «больше», и я хочу, чтобы больше отображалось popover. Попсору нужно знать, на чью точку привязали, поэтому как мне получить ссылку на кнопку с надписью «больше»?Как получить ссылку на кнопку из UITableViewRowAction?
Мой код:
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
var moreRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "More", handler:{action, indexpath in
let p = SomeViewController(aClient: client)
let aPopover = UIPopoverController(contentViewController: p)
let popRect = self.view.frame
// What should x be?
let x: UIView = self.tableView.cellForRowAtIndexPath(indexPath)!
aPopover.presentPopoverFromRect(popRect, inView: x, permittedArrowDirections: UIPopoverArrowDirection.Any, animated: true)
});
var deleteRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Delete", handler:{action, indexpath in
// Do something to delete.
});
return [deleteRowAction, moreRowAction];
}
Этот код показывает, как поповер закрепленную на всей клетки, а не на кнопку «Дополнительно».
Я искал документацию о UITableViewRowAction
, но ничего там не дал мне поводов. Тип аргумента action
также является UITableViewRowAction
, поэтому я не уверен, что он может быть использован.
Update
Согласно комментарий, я получил это работает. Я вызываю метод в пользовательском контроллере ячеек, там я обращаюсь к массиву subviews. Мне не нравится доступ к массиву subviews и предположение о позиции кнопки в этом массиве.
Рабочий код:
В Tableview обратный вызов я:
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
var moreRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Plus", handler:{action, indexpath in
let cell = self.tableView.cellForRowAtIndexPath(indexPath)! as MyCell
cell.showPopover()
});
Внутри MyCell я:
func showPopover() {
let p = ClientLongPressViewController(client: self.client)
let aPopover = UIPopoverController(contentViewController: p)
let x: UIView = self.subviews[0].subviews[1] as? UIView ?? self
let popRect = x.frame
aPopover.setPopoverContentSize(CGSize(width: 215, height: 241), animated: true)
aPopover.presentPopoverFromRect(popRect, inView: x, permittedArrowDirections: UIPopoverArrowDirection.Any, animated: true)
}
Я попытался (внутри MyCell), чтобы получить доступ к self.contentView
, но это только содержит элементы из вида основной ячейки, а не элементы прокрутки.
Также пробовал использовать self.editingAccessoryView
, но это нуль.
Так что я все же хотел бы более хороший способ получить «удалить вид подтверждения», который я теперь получить доступ с self.subviews[0]
(Второй subview[1]
это хорошо, на мой взгляд, потому что я решил, что это положение, когда я вернусь [deleteRowAction, moreRowAction]
.
ли вы пытаетесь показывать в moreRowAction кнопки View aPopover.presentPopoverFromRect (popRect, INview: moreRowAction, permittedArrowDirections: UIPopoverArrowDirection.Any, анимированные: правда) – Shashi3456643
Это не подкласс 'UIView', так что это не может работать. Я просто попытался, и для некоторой ошибки я не могу использовать переменную для определения себя, но она не должна работать из-за первой причины. –
Может быть, вы можете найти координаты позиции более кнопки и попробовать отобразить в UITableViewCell – Shashi3456643