在Swift的自定义单元格中显示操作表

时间:2015-09-25 14:00:47

标签: swift uitableview uialertcontroller

我有一个自定义单元格,其中包含一个按钮,我想在按下按钮时显示一个操作表,但是你知道,UITableViewCell没有方法" presentViewController&#34那么我该怎么办?

2 个答案:

答案 0 :(得分:2)

在自定义单元格的swift文件中,编写一个由viewContoller符合的协议,

// your custom cell's swift file

protocol CustomCellDelegate {
    func showActionSheet()
}

class CustomTableViewCell : UITableViewCell {
    var delegate: CustomCellDelegate?

    // This is the method you need to call when button is tapped.
    @IBAction func buttonTapped() {

        // When the button is pressed, buttonTapped method will send message to cell's delegate to call showActionSheet method.
        if let delegate = self.delegate {
            delegate.showActionSheet()
        }
    }
}

// Your tableViewController
// it should conform the protocol CustomCellDelegate

class MyTableViewController : UITableViewController, CustomCellDelegate {

    // other code

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("CustomCellReuseIdentifier", forIndexPath: indexPath)

        // configure cell

        cell.delegate = self        

        return cell
    }

    // implement delegate method
    func showActionSheet() {

        // show action sheet

    }
}

确保您的视图控制器符合CustomCellDelegate协议并实现showActionSheet()方法。

在cellForRowAtIndexPath dataSource方法中创建单元格时,将viewContoller指定为自定义单元格的委托。

您可以在viewController中的showActionSheet方法中显示新的视图控制器。

答案 1 :(得分:0)

这就是你要这样做的方式:

  1. 为您的客户创建协议UITableViewCellMyTableViewCellDelegate
  2. 在协议中添加方法cellButtonTapped
  3. 使您的视图控制器(使用这些单元格)符合MyTableViewCellDelegate,即在标题文件中添加<MyTableViewCellDelegate>
  4. 在视图控制器的cellForRowAtIndexPath:方法中,初始化单元格时,将self设置为委托。
  5. 在自定义表格视图单元格类中,当点击按钮时,将控件移交给其作为视图控制器的委托。
  6. 在视图控制器中实现方法cellButtonTapped并根据需要显示操作表。