首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift3:将函数数据从主VC调用到条件单元格的TableVC

Swift是一种流行的编程语言,用于开发iOS、macOS、watchOS和tvOS应用程序。Swift 3是Swift语言的一个版本,引入了一些新的特性和语法改进。

在Swift中,要将函数数据从一个视图控制器(ViewController)传递到另一个条件单元格的表格视图控制器(TableViewController),可以使用代理模式或闭包(Closure)。

  1. 代理模式: 代理模式是一种常用的设计模式,用于在对象之间传递数据和通信。在这种情况下,你可以创建一个协议(Protocol),定义一个代理(Delegate)属性,并在主视图控制器中实现该协议。然后,在条件单元格的表格视图控制器中,你可以设置主视图控制器为代理,并通过代理方法将函数数据传递回主视图控制器。

示例代码:

在主视图控制器(MainViewController)中:

代码语言:swift
复制
protocol DataDelegate: class {
    func sendData(data: String)
}

class MainViewController: UIViewController, DataDelegate {
    // 实现代理方法
    func sendData(data: String) {
        // 处理传递过来的数据
        print(data)
    }

    // 在某个事件触发时调用代理方法
    func sendButtonTapped() {
        let tableViewController = TableViewController()
        tableViewController.delegate = self
        navigationController?.pushViewController(tableViewController, animated: true)
    }
}

在条件单元格的表格视图控制器(TableViewController)中:

代码语言:swift
复制
class TableViewController: UITableViewController {
    weak var delegate: DataDelegate?

    // 在某个条件满足时调用代理方法,并传递数据
    func didSelectCellWithData(data: String) {
        delegate?.sendData(data: data)
        navigationController?.popViewController(animated: true)
    }
}
  1. 闭包(Closure): 闭包是一种自包含的函数代码块,可以在代码中被传递和引用。在这种情况下,你可以在主视图控制器中定义一个闭包属性,并将其作为参数传递给条件单元格的表格视图控制器。然后,在表格视图控制器中,你可以调用闭包并传递函数数据。

示例代码:

在主视图控制器(MainViewController)中:

代码语言:swift
复制
class MainViewController: UIViewController {
    var dataClosure: ((String) -> Void)?

    // 在某个事件触发时调用闭包,并传递数据
    func sendButtonTapped() {
        let tableViewController = TableViewController()
        tableViewController.dataClosure = { data in
            // 处理传递过来的数据
            print(data)
        }
        navigationController?.pushViewController(tableViewController, animated: true)
    }
}

在条件单元格的表格视图控制器(TableViewController)中:

代码语言:swift
复制
class TableViewController: UITableViewController {
    var dataClosure: ((String) -> Void)?

    // 在某个条件满足时调用闭包,并传递数据
    func didSelectCellWithData(data: String) {
        dataClosure?(data)
        navigationController?.popViewController(animated: true)
    }
}

以上是将函数数据从主视图控制器传递到条件单元格的表格视图控制器的两种常用方法。根据具体的需求和场景,你可以选择适合的方法来实现数据传递。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

史上最全的iOS之访问自定义cell的textField.text的N种方法

问题背景:自定义cell中有一个UITextField类型的子控件。我们经常要在tableView中拿到某个cell内textField的文本内容进行一些操作。比如某些app的注册界面就是以tableView的形式存在的,注册时往往需要注册姓名、昵称、邮箱、地址、联系方式等信息。然后点击注册或者提交,这些信息就会被提交到远程服务器。有人说,注册页面就那么固定的几行cell,没必要搞得那么复杂,完全可以用静态cell实现。但还有一些情况,当前页面的tableView的cell的行数是不确定的(比如当前页面显示多好行cell由上一个页面决定或者由用户决定),这种情况下不太适合使用静态cell。也不能够通过分支语句的方式一一枚举出各个case。所以需要一中通用的动态的方法。那么我们怎么在tableView中准确的拿到每一行cell中textField的text呢?以下我将要分四个方法分别介绍并逐一介绍他们的优缺点,大家可以在开发中根据实际情况有选择的采用不同的方法。 如下图,就是我之前开发的一个app中用xib描述的一个cell,当用户点击“注册”或者“提交”button时候,我需要在控制器中拿到诸如“法人姓名”这一类的信息:

04
领券