- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从 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)
}
最佳答案
你可以:
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
}
让您的 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
}
然后您的@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/
我是一名优秀的程序员,十分优秀!