从 UITableViewCell 子类调用 UIActionSheet
Call UIActionSheet from UITableViewCell subclass
我正在制作一个表格,其中有一堆不同的 UITableViewCells,具有不同的功能,所以我不想让我的 UITableView class 为每个动作都加上颂歌,而是想将每个功能实现到单元格 subclass 本身。
所以,我现在有一个单元格,其中会弹出一个 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")
}
TableViewCell 不应该在 MVC Patterned framework as iOS is one 中包含那种逻辑。
如果您想重用该逻辑,那么您应该创建一个 TableViewController(或 ViewController),然后将其子类化。
在 TableView 委托方法中,您将调用您的操作。
示例:
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,因此我应该检查一下?
我正在制作一个表格,其中有一堆不同的 UITableViewCells,具有不同的功能,所以我不想让我的 UITableView class 为每个动作都加上颂歌,而是想将每个功能实现到单元格 subclass 本身。
所以,我现在有一个单元格,其中会弹出一个 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")
}
TableViewCell 不应该在 MVC Patterned framework as iOS is one 中包含那种逻辑。
如果您想重用该逻辑,那么您应该创建一个 TableViewController(或 ViewController),然后将其子类化。 在 TableView 委托方法中,您将调用您的操作。
示例:
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,因此我应该检查一下?