我正在创建一个表单,其中包含一堆不同的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")
}
答案 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,因此我应该检查?