Aaron Presley


Registering Nib Text Field Event in Parent View May 21, 2016

I've created a custom UiTableViewCell nib with a text field, and I've had a hell of a time figuring out how to register text changes in my parent view. I didn't find anything through Googling, so I figured I'd contribute the solution I figured out, using Swift:

CustomTableViewCell.swift

I created this file pretty simply. I just created a standard IBOutlet for the text field as normal.

import UIKit

class CustomTableViewCell: UITableViewCell {

    @IBOutlet weak var textField: UITextField!

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

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

    @IBAction func namePrimaryActionTriggered(sender: AnyObject) {
        self.textField.endEditing(true)
    }
}

MyTableViewController.swift

Here's where it got fun. Firstly I extended UITextFieldDelegate on my class:

class MyTableViewController: UITableViewController, UITextFieldDelegate {

Next, I added this in the viewDidLoad() method:

self.customCell = NSBundle.mainBundle().loadNibNamed("CustomTableViewCell", owner: self, options: nil)[0] as! CustomTableViewCell
self.customCell.textField.delegate = self

For our cellForRowAtIndexPath we now use this variable:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = self.customCell

    cell.textField.text = "Some Text"

    return cell
}

We can now use the standard functions to detect changes in the nib's text field:

func textFieldDidEndEditing(textField: UITextField) {
    if textField == self.customCell.textField {
        debugPrint(textField)
    }
}

Not sure if this is the best way to go about it, as I'm just figuring out iOS. Use at your own risk!