我有一个带有我自己的UITableViewCells的UITableView,它包含一个UIButton。 UITableView在运行时添加到我的ViewController中。一切都很好,就像我看到单元格中的Button一样。当按下按钮时,我的动作在我的UITableViewCell中被调用。
现在。当在我的单元格中按下按钮时,如何调用ViewController中的方法?
在我的UITableViewCell类中,我在单元格中有一个按钮:
let framebutton_in_cell:CGRect=CGRectMake(0, 0, 40,40);
button_in_cell.frame=framebutton_in_cell;
button_in_cell.addTarget(self, action: "buttonActionText:", forControlEvents: UIControlEvents.TouchUpInside)
button_in_cell.tag = 1;
var image2 = UIImage(named: "book");
button_in_cell.setImage(image2, forState: .Normal)
var transparent2:UIColor=UIColor(red: 0, green: 0, blue: 0, alpha: 0.0);
contentView.addSubview(button_in_cell);
我的功能buttonActionText:
func buttonActionTimeline(sender:UIButton!)
{
var btnsendtag:UIButton = sender
//do something
}
我的UITableView在运行时添加到我的UIViewController:
override func viewDidLoad() {
super.viewDidLoad()
let fSearchResultY:CGFloat=fButtonHeight+fButtonY;
searchResults.frame = CGRectMake(0, fSearchResultY, screenwidth, screenheight-fSearchResultY);
searchResults.delegate = self;
searchResults.dataSource = self;
searchResults.registerClass(CellResult.self, forCellReuseIdentifier: "Cell");
self.view.addSubview(searchResults);
现在我想在我的ViewController中调用一个方法,在我的UITableViewCell中输入一个方法。我怎样才能做到这一点?
答案 0 :(得分:4)
只是不要从UITableViewCell类添加目标而是将其添加到cellForRowAtIndexPath方法
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier", forIndexPath: indexPath) as! SomeCustomCell
cell.button_in_cell.addTarget(self, action: "viewControllerMethod:", forControlEvents: UIControlEvents.TouchUpInside)
}
答案 1 :(得分:2)
一个非常简单的解决方案: -
cell.delegate=self;
答案 2 :(得分:0)
我没有正确地回答你的问题?这是你在寻找
func buttonActionText(sender:AnyObject){
CGPoint buttonPosition=sender.convertPoint(CGPointZero, fromView: self.tableView)
NSIndexPath indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
}
答案 3 :(得分:0)
创建UITableviewCell的子类。在我的代码中,我使用了Question Cell
func buttonActionTimeline(sender: UIButton!)
{
var btn:UIButton=sender as UIButton
let point = tblVIew.convertPoint(CGPointZero, fromView: sender)
let indexPath : NSIndexPath = tblVIew.indexPathForRowAtPoint(point)!
let cell = tblVIew.cellForRowAtIndexPath(indexPath) as QuestionCell // Your custom cell class name
cell.loaddata() // add this method in to custom cell class
}