2015-08-12 3 views
0

У меня есть пользовательская ячейка, а в пользовательской ячейке у меня есть textField, и я хотел бы знать, как я могу сделать протокол из класса customCell для вызова функции в моем ViewController. Я сделал код, но застрял.Протокол от customCell до ViewController

Моя проблема, когда я касаюсь textField, я хочу вызвать функцию из моего ViewController.

Мой customCell класс:

@objc protocol MySearchDelegate{ 
    optional func textFieldTouched() 
} 

class SearchTableViewCell: UITableViewCell, UITextFieldDelegate { 

    @IBOutlet weak var searchField: UITextField! 

    // this is where I declare the protocol 
    var delegate:MySearchDelegate? 

    func searchStart(){ 
     delegate?.textFieldTouched!() 
    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     searchField.addTarget(self, action: Selector("searchStart"), forControlEvents: UIControlEvents.ValueChanged) 
    } 

    func searchStart(){ 
     delegate?.textFieldTouched() 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 
    } 

} 

ответ

0

Измененный код, чтобы избежать сильных опорных циклов и в соответствии с вашим протоколом:

var search:SearchTableViewCell = SearchTableViewCell() 

    override func viewDidLoad() { 
     search.delegate = self 
    } 

    func textFieldTouched() { 
     println("voila") 
    } 

} 

protocol MySearchDelegate: class { 
    func textFieldTouched() 
} 

class SearchTableViewCell: UITableViewCell, UITextFieldDelegate { 

    @IBOutlet weak var searchField: UITextField! 

    // this is where I declare the protocol 
    weak var delegate:MySearchDelegate? 

    func searchStart(){ 
     delegate?.textFieldTouched() 
    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 
    } 

} 
+0

Я сделал изменение Ничего не случилось, если я сделаю что-нибудь еще? – CAN

+0

, вы должны соединить свое текстовое поле с помощью изменения значения. затем откройте «searchStart». – rshev

+0

Я отредактировал мой код, можете ли вы проверить? Правильно ли, что я сделал? – CAN

1

Я не хорошо на стрижа, так что это может быть ошибка. Вы должны назначить делегат ячейки при создании ячейки.

 class FirstViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, MySearchDelegate { 

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

       // set the delegate here not in the viewDidLoad 
     cell.searchDelegate = self 

       return cell 
      } 

      func textFieldTouched(){ 
       //do what you want here 
      } 
} 
Смежные вопросы