从UITableViewCell子类

时间:2015-08-02 07:27:51

标签: ios swift uitableview subclass uiactionsheet

我正在创建一个表单,其中包含一堆不同的UITableViewCell,具有不同的功能,因此我不想使每个动作都使用ode混乱我的UITableView类,我想将每个函数实现到单元子类本身。

所以,我现在有一个单元格,弹出UIActionSheet,但是当我点击没有任何反应时,即使已经设置了委托。

我的想法是错的,还有其他方式可以做得更好吗?这是一些简单的代码。

import UIKit
class STypeCell: UITableViewCell, UIActionSheetDelegate {

    func chooseType() {
        var sheet: UIActionSheet = UIActionSheet()
        let title: String = "Please choose a course"
        sheet.delegate = self
        sheet.title  = title
        sheet.addButtonWithTitle("Cancel")
        sheet.addButtonWithTitle("A course")
        sheet.addButtonWithTitle("B course")
        sheet.addButtonWithTitle("C course")
        sheet.cancelButtonIndex = 0
        sheet.showInView(self.superview)
    }

    func actionSheet(sheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
        println("this never gets called")
    }

    func actionSheet(actionSheet: UIActionSheet, willDismissWithButtonIndex buttonIndex: Int) {
        println("this never gets called")
    }

    func actionSheet(actionSheet: UIActionSheet, didDismissWithButtonIndex buttonIndex: Int) {
        println("this never gets called")
    }

1 个答案:

答案 0 :(得分:1)

TableViewCell不应该在MVC Patterned framework as iOS is one中包含那种逻辑。

如果要重用该逻辑,则应创建一个子类化的TableViewController(或ViewController)。 在TableView Delegate方法中,您可以调用您的操作。

示例:

class MySuperTableView: UITableViewController, UIActionSheetDelegate {

// [...]

  override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
  {
      self.chooseType()
  }

  func chooseType() {
      var sheet: UIActionSheet = UIActionSheet()
      let title: String = "Please choose a course"
      sheet.delegate = self
      sheet.title  = title
      sheet.addButtonWithTitle("Cancel")
      sheet.addButtonWithTitle("A course")
      sheet.addButtonWithTitle("B course")
      sheet.addButtonWithTitle("C course")
      sheet.cancelButtonIndex = 0
      sheet.showInView(self.view)
  }

  func actionSheet(sheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
      println("this never gets called")
  }

  func actionSheet(actionSheet: UIActionSheet, willDismissWithButtonIndex buttonIndex: Int) {
      println("this never gets called")
  }

  func actionSheet(actionSheet: UIActionSheet, didDismissWithButtonIndex buttonIndex: Int) {
      println("this never gets called")
  }

// [...]
}

class MyChildTableView: MySuperTableView {

// [...]

  override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
  {
      super.tableView(tableView, didSelectRowAtIndexPath: indexPath)
  }

// [...]

}

class MyOtherChildTableView: MySuperTableView {

// [...]

  override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
  {
      super.tableView(tableView, didSelectRowAtIndexPath: indexPath)
  }

// [...]

}

当然更多的逻辑会有所帮助:点击了什么样的行?我是否有其他可以点击的TableViewCells,因此我应该检查?