2015-02-08 30 views
3

У меня есть табличный вид, и я использую 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].

+0

ли вы пытаетесь показывать в moreRowAction кнопки View aPopover.presentPopoverFromRect (popRect, INview: moreRowAction, permittedArrowDirections: UIPopoverArrowDirection.Any, анимированные: правда) – Shashi3456643

+0

Это не подкласс 'UIView', так что это не может работать. Я просто попытался, и для некоторой ошибки я не могу использовать переменную для определения себя, но она не должна работать из-за первой причины. –

+1

Может быть, вы можете найти координаты позиции более кнопки и попробовать отобразить в UITableViewCell – Shashi3456643

ответ

1

Кажется, что нет прямой прямой доступ к самой кнопке, но после того, как вы проведете камеру, я считаю, что то, что происходит, состоит в том, что ячейка перемещена влево, а новое представление, называемое UITableViewCellDeleteConfirmationView, добавляется на Итак, если вы разместите popover в начале ячейки и ее ширину, она будет на правом краю ячейки, которая будет левее вашей кнопки (при условии, что ваша кнопка остается самой левой, если вы имеют несколько, но тонн).

var moreRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "More", handler:{action, indexpath in 

    let p = SomeViewController(aClient: client) 
    let aPopover = UIPopoverController(contentViewController: p) 
    let cell: UITableViewCell = self.tableView.cellForRowAtIndexPath(indexPath)! 
    let popRect = CGRectMake(cell.frame.origin.x + cell.frame.size.width, cell.frame.size.height/2.0, 1, 1); 
    aPopover.presentPopoverFromRect(popRect, inView: cell, permittedArrowDirections: .Right, animated: true) 
    }); 
+0

Отличная идея. Но я думаю, что буду придерживаться wview subviews [0] ... Во всяком случае +1 :) –

+0

К сожалению, похоже, что cell.frame.origin.x всегда 0 – Kremk

Смежные вопросы