使用 UIButton 操作在 UITableViewCell 中显示弹出框

Posted

技术标签:

【中文标题】使用 UIButton 操作在 UITableViewCell 中显示弹出框【英文标题】:Present a popover in UITableViewCell with UIButton Action 【发布时间】:2016-05-15 01:40:13 【问题描述】:

我有一个包含 UIButton 的自定义 UITableViewCell。当我按下按钮时,我想显示一个带有一些文本的弹出框。文本会因按下的 indexPath 而异。

下面是我目前的代码。

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

这是我的自定义 UITableViewCell。我有一个打印一行的按钮操作,我想将其显示为弹出框。

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)






【问题讨论】:

【参考方案1】:

ViewController.swift

1.在 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
  

【讨论】:

【参考方案2】:

您可以在表格中设置手势识别器,检测是否按下了单元格,以及按下了哪个。

像这样声明一个属性:

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

【讨论】:

以上是关于使用 UIButton 操作在 UITableViewCell 中显示弹出框的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建的 UITextField 隐藏了其他控件

使用选择器操作向 UIView 添加多个 UIButton

我必须使用协议/委托来让 ViewController 执行在另一个类中创建的 UIButton 的操作吗?

无法在 UIButton 故事板上添加操作

如何从 UIButton 操作方法获取 UITableViewCell 对象?

在 UITableViewCell 中为 UIButton 添加和删除目标操作