如何从UITableViewCell中的UIButton调用控制器中的方法

时间:2015-05-15 11:08:48

标签: ios uitableview swift uibutton

我有一个带有我自己的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中输入一个方法。我怎样才能做到这一点?

4 个答案:

答案 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)

一个非常简单的解决方案: -

  1. 只需在自定义单元格中声明委托方法。
  2. 使用视图控制器cell.delegate=self;
  3. 设置Cell的委托
  4. 现在在Cell的按钮操作上调用delegate方法,并将button.tag作为对象发送(如果需要),它将直接调用View Controller的委托方法,该方法已定义。

答案 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
 }