2015-05-15 2 views
1

У меня есть UITableView с моим собственным UITableViewCells, который содержит UIButton. UITableView добавляется в мой ViewController во время выполнения. Все работает так, что я вижу кнопку в ячейках. При нажатии кнопки мое действие вызывается в моем UITableViewCell.Как вызвать метод в контроллере из UIButton в 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, установленном в моем UIT ableViewCell. Как я могу это достичь? ?

+0

Создать собственный класс для этой ячейки, а затем определить действие кнопки в классе простирался от UITableViewCell –

+1

Вы должны добавить делегат для этого, узнать Swift протоколы. –

ответ

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) 

} 
+0

Спасибо. Это именно то, что я искал. –

0

я не получил ваш вопрос правильно ли это у ¨R ищет

func buttonActionText(sender:AnyObject){ 
    CGPoint buttonPosition=sender.convertPoint(CGPointZero, fromView: self.tableView) 
    NSIndexPath indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition]; 
} 
2

очень простое решение: -

  1. Просто объявить метод делегата в вашей пользовательской ячейке.
  2. Установите делегат Cell с View Controller cell.delegate=self;
  3. Теперь вызовите метод делегата на кнопку действия ячейки, а также отправить button.tag как объект (в случае необходимости), он будет непосредственно вызывать ваш метод делегата View Controller, который является определяется.
0

Создайте подкласс UITableViewCell. В моем коде я использовал вопрос 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 
} 
Смежные вопросы