gpt4 book ai didi

uitableview - 如何从@IBAction 中调用 TableView 函数

转载 作者:行者123 更新时间:2023-11-28 07:16:33 25 4
gpt4 key购买 nike

cellForRowAtIndexPath 中:

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {

我正在创建一个 UITableViewCell 子类,PeopleTableViewCell:

let cell:PeopleTableViewCell  = self.tv_main.dequeueReusableCellWithIdentifier("row_cell") as PeopleTableViewCell

然后我传递一些参数

cell.loadItem( param1 as NSString, p2: param2 )

现在,每一行都有一个按钮,当我点击它时

@IBAction func button_clicked( param1: NSString){

我需要在父表中调用一个函数,该函数将我传递的参数之一(ex param1)作为参数。

我怎样才能做到这一点?


编辑,在@rob 给出的答案之后:

最终起作用的是

一个。将对父 UIViewController 的引用传递给 cell.loadItem

func cell.loadItem( param1 as NSString, controller: self ) 

并将 Controller 变量分配给局部变量,例如 pvcontroller

 func loadItem(param1: String, controller: PeopleViewController)  {
self.pvcontroller = controller
}

B.在 PeopleTableViewCell 类中,在按钮点击函数中,我通过 pvcontroller 变量调用父 UIViewController 的函数

  @IBAction func person_image_click(sender: UIButton) {
self.pvcontroller?.person_clicked(self.param1)
}

最佳答案

你可以:

  1. PeopleTableViewCell 中有一个由 loadItem 更新的属性:

    class PeopleTableViewCell : UITableViewCell {

    var param1: NSString?

    func loadItem(param1: NSString, param2: NSString) {
    self.param1 = param1

    // do your other stuff here
    }

    // the rest of your implementation here
    }
  2. 让您的 cellForRowAtIndexPath 调用 loadItem:

    override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    let cell = tableView.dequeueReusableCellWithIdentifier("row_cell", forIndexPath: indexPath) as PeopleTableViewCell

    let param1 = ...
    let param2 = ...

    cell.loadItem(param1, param2: param2)

    return cell
    }
  3. 然后您的@IBAction 可以确定PeopleTableViewCell 实例,并访问其属性。请注意,@IBAction 参数 sender 像往常一样引用按钮。因此,如果这个 @IBAction 是在 TableView Controller 中实现的,那么您必须向上导航 View 层次结构才能到达单元格,然后从那里访问属性:

    @IBAction func buttonClicked(sender: UIButton) {
    let cell = sender.superview?.superview as PeopleTableViewCell

    let param1 = cell.param1

    // do something with param1 now
    }

    在这个例子中,我在单元格的内容 View 上有一个按钮,所以我要上两层 superview(一层获取内容 View ,一层获取单元格)。只需确保您在这里所做的一切都反射(reflect)了您在 IB 中配置的层次结构。

    或者,您可以从 PeopleTableViewCell 类中实现您的 @IBAction,在这种情况下您不必使用此 sender.superview?.superview 语法,而是可以只引用 self 来获取 param1 属性。这取决于你。

关于uitableview - 如何从@IBAction 中调用 TableView 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25646707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com