我有一个表格视图,其中有数量可变的单元格,代表学生,对应于他们特定的讲师.它们是带有按钮的自定义单元格,可以触发到新VC的序列,显示该单元格所在学生的详细信息.我的问题是:

在swift中,识别按下哪个按钮的最佳实践是什么?

一旦我知道了索引路径,我就可以确定哪些学生的信息需要传递给下一个VC.在下面的帖子中,有一个关于目标C的很好的答案,但我不知道如何翻译成Swift.任何帮助都将不胜感激.

Detecting which UIButton was pressed in a UITableView

推荐答案

如果您的代码允许,我建议您将UIButton标记设置为indexPath.row,这样当其操作被触发时,您可以在触发方法期间拉出标记,从而从按钮数据中取出行.例如,在cellForRowAtIndexPath中,可以设置标签:

button.tag = indexPath.row
button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)

然后在buttonClicked:中,您可以获取标记,从而获取行:

func buttonClicked(sender:UIButton) {

    let buttonRow = sender.tag
}

否则,如果出于某种原因,这对您的代码不利,请快速翻译this Objective-C answer you linked to:

- (void)checkButtonTapped:(id)sender
{
    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
    if (indexPath != nil)
    {
     ...
    }
}

是:

func checkButtonTapped(sender:AnyObject) {
      let buttonPosition = sender.convert(CGPoint.zero, to: self.tableView)
    let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
    if indexPath != nil {
        ...
    }
}

Swift相关问答推荐

如何根据列表中的项目数量创建多个变量?

为什么在Swift属性Wrapper中需要类型注释?

TabView中的视频播放器意外播放

如何让CTFontCreateUIFontForLanguage与汉字和表情包协同工作?

通常从数组调用的SWIFT静态协议函数

从AppKit打开SwiftUI设置

如何避免切换视图递归onChange调用SwiftUI

SwiftUI 拖放:如果没有上下文类型,则无法解析对成员‘first’的引用

除法中如果除以完全因数需要更长时间吗?

DispatchQueue.main.asyncAfter 等同于 Swift 中的 struct 化并发?

在 RealityKit 中查找特定模型的 findEntity(named:) 方法的替代方法?

如何修改下面的代码,使图像 Select 的顺序与使用快速并发的图像呈现的顺序相匹配?

@Binding 在@StateObject 和 View 上被发布了两次?

Swift 包管理器 Package.resolved 文件末尾的版本是什么意思?

无法使用 RealityKit 播放 USDZ 动画

如何判断一个值是否为 Int 类型

Pod lib lint 命令找不到 watchos 模拟器

如何裁剪图像 3:4 ?迅速

如何根据 SwiftUI 中的字体大小定义按钮的大小?

当我必须在 Swift 中的类、 struct 和枚举之间进行 Select 时,我应该如何推理?