2016-05-15 3 views
0

У меня есть пользовательский UITableViewCell, который содержит UIButton. когда я нажимаю кнопку, я хочу отобразить popover с некоторым текстом. Текст будет меняться в зависимости от нажатия indexPath.Представьте popover в UITableViewCell с действием UIButton

ниже - мой код.

class CellButton: UIButton { 
weak var myTable: UITableView? 
weak var myCell: UITableViewCell? 
} 

Это мой пользовательский UITableViewCell. У меня есть действие кнопки, которое печатает строку, я хочу вместо этого отобразить это как popover.

class CourseworkTableViewCell: UITableViewCell, UIPopoverPresentationControllerDelegate { 

@IBOutlet weak var courseworkName: UILabel! 
@IBOutlet weak var courseworkMark: UILabel! 
@IBOutlet weak var courseworkValue: UILabel! 
@IBOutlet weak var courseworkReminder: UILabel! 
@IBOutlet weak var courseworkDueDate: UILabel! 
@IBOutlet weak var viewNote: CellButton! 

@IBOutlet weak var courseworkProgressBar: ProgressBar! 
@IBAction func viewNotePressed(button: CellButton){ 

if let myCell = button.myCell, indexPath = button.myTable?.indexPathForCell(myCell) { 

    let entry = courseworks[indexPath.row] 
    print(entry.valueForKey("courseworkNotes") as! String) 




} 
} 

ответ

0

Вы можете установить распознаватель жестов в своей таблице, определить, была ли нажата ячейка, а какая была.

Объявите свойство как это:

UILongPressGestureRecognizer * lpgr 

Тогда:

func setUpLongPressGesture() { 
    self.lpgr = UILongPressGestureRecognizer(target: self, action: "handleLongPressGestures:") 
    self.lpgr.minimumPressDuration = 1.0 
    self.lpgr.allowableMovement = 100.0 
    self.myTable.addGestureRecognizer(self.lpgr) 
} 

func handleLongPressGestures(sender: UILongPressGestureRecognizer) { 
    if sender.isEqual(self.lpgr) { 
     if sender.state == .Began { 
       //Get the table indexPath 
      var p: CGPoint = sender.locationInView(self.myTable) 
      var indexPath: NSIndexPath = self.myTable(forRowAtPoint: p) 
      //if indexPath==nil means long press on table view but not on a row 
      if indexPath != nil { 
       var cell: UITableViewCell = self.myTable.cellForRowAtIndexPath(indexPath) 
       if cell.isHighlighted { 
        NSLog("long press on table view at section %ld row %ld", Int(indexPath.section), Int(indexPath.row)) 
        self.currentIndexPath = indexPath 
        //Do your stuff 
       } 
      } 
     } 
    } 
    // End sender isEqual longPress 
} 
1

ViewController.swift

1.In cellForRowAtIndexPath правопреемником тег для кнопки

cell.myButton.tag=indexPath.row 

2. В IBAction для кнопки вы можете получить доступ к этому тегу.

@IBAction func buttonTapped(sender: UIButton) { 

    let entry = courseworks[sender.tag] 
    //here you can implement a alertView to show popover 
      //according to your requirement 
    } 
Смежные вопросы