title: resignFirstResponder
body: <p>I have a little problem resigning the keyboard. I have a table with two sections. In the second section, I load the class <code>stationenStartCellNumber</code> which has a <code>UITextField</code>. </p>
  
  <p>When I press anywhere outside of the <code>UITextField</code>, I want the keyboard to resign as first responder, and thereby closing the keyboard. It works perfectly inside of my cell, but not on my <code>UITableView</code>.</p>
  
  <p>This is my code:
  <strong>stationenViewController.h</strong>:</p>
  
  <pre><code>#import &lt;UIKit/UIKit.h&gt;
  #import "stationenStartCell.h"
  #import "stationenAppDelegate.h"
  
  @interface stationenViewController : UIViewController  &lt;UITableViewDelegate, UITableViewDataSource&gt; {
      IBOutlet UITableView *theTable;
  
      NSString *stationenPlistPath;
  }
  
  @property (nonatomic, retain) UITableView *theTable;
  @property (nonatomic, retain) IBOutlet NSString *stationenPlistPath;
  
  - (void)copyStationPlist;
  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;
  
  @end
  </code></pre>
  
  <p><strong>stationenViewController.m</strong>:</p>
  
  <pre><code>#import "stationenViewController.h"
  #import "chooseStationView.h"
  #import "chooseArrDepView.h"
  #import "stationenStartCellNumber.h"
  
  @implementation stationenViewController
  
  @synthesize theTable;
  @synthesize stationenPlistPath;
  
  - (void)viewWillAppear:(BOOL)animated {
      [theTable reloadData];
  
      [[[self navigationController] navigationBar] setAlpha:1];
  
      [super viewWillAppear:animated];
  }
  
  - (void)viewDidLoad
  {
      NSArray *bikePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
      NSString *bikeDocumentsDirectory = [bikePath objectAtIndex:0];
      stationenPlistPath = [bikeDocumentsDirectory stringByAppendingPathComponent:@"stationen.plist"];
  
      if(![[NSFileManager defaultManager] fileExistsAtPath:stationenPlistPath])
      {
          [self copyStationPlist];
      }
  
      [super viewDidLoad];
  }
  
  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
      return 2;
  }
  
  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  {   
      NSUInteger returnInt = 2;
  
      if (section == 1)
      {
          returnInt = 1;
      }
  
      return returnInt;
  }
  
  - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
      NSString *returnString = [[NSString alloc] init];
  
      if(section == 0)
      {
          returnString = @"Search station details";
      }
      else if (section == 1)
      {
          returnString = @"Search train number";
      }
  
      return returnString;
  }   
  
  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {
      if (indexPath.section == 0)
      {
          static NSString *CellIdentifier = @"stationenStartCellID";
          stationenStartCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
          NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
  
          if (cell == nil){
              NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"stationenStartCell" owner:nil options:nil];
  
              for(id currentObject in topLevelObjects)
              {
                  if([currentObject isKindOfClass:[stationenStartCell class]])
                  {
                      cell = (stationenStartCell *)currentObject;
                      break;
                  }
              }
          }
  
          [[cell theBackground] setBackgroundColor:[[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"stationenStartCell_Background.png"]]];
          [[cell theImage] setImage:[UIImage imageNamed:@"icon_checkMark.png"]];
  
          [UIView beginAnimations:nil context:NULL];
          [UIView setAnimationDuration:0.5];
  
          if(indexPath.row % 4 == 0)
          {
              [[cell cellName] setText:NSLocalizedString(@"Choose station", @"Main page")];
              [[cell chosenValue] setText:[prefs valueForKey:@"chosenStation"]];
  
              NSLog(@"Log info: %@", [prefs valueForKey:@"chosenStation"]);
  
              if([[prefs valueForKey:@"chosenStation"] isEqualToString:@""] || [prefs valueForKey:@"chosenStation"] == nil)
              {
                  [[cell theImage] setAlpha:0.2];
              }
              else {
                  [[cell theImage] setAlpha:1];
              }
          }
  
          if(indexPath.row % 4 == 1)
          {
              NSString *searchType = [prefs valueForKey:@"searchType"];
              NSString *theValue = @"";
              if([searchType isEqualToString:@"0"])
              {
                  theValue = NSLocalizedString(@"Arrivals", @"Main page");
              }
              else if([searchType isEqualToString:@"1"])
              {
                  theValue = NSLocalizedString(@"Departures", @"Main page");
              }
  
              if([theValue isEqualToString:@""])
              {
                  [[cell theImage] setAlpha:0.2];
              }
              else {
                  [[cell theImage] setAlpha:1];
              }
  
              [[cell cellName] setText:NSLocalizedString(@"Choose departure/arrival", @"Main page")];
              [[cell chosenValue] setText:theValue];
          }
  
          [UIView commitAnimations];
  
          return cell;
      }
      else if (indexPath.section == 1)
      {
          static NSString *CellIdentifier = @"stationenStartCellNumber";
          stationenStartCellNumber *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  
          if (cell == nil){
              NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"stationenStartCellNumber" owner:nil options:nil];
  
              for(id currentObject in topLevelObjects)
              {
                  if([currentObject isKindOfClass:[stationenStartCellNumber class]])
                  {
                      cell = (stationenStartCellNumber *)currentObject;
                      break;
                  }
              }
          }
  
          [[cell theLabel] setText:@"Tåg nr:"];
  
          return cell;
      }
  
      return nil;
  }
  
  - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
      [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
  
      if (indexPath.section == 0)
      {
          if(indexPath.row == 0)
          {
              chooseStationView *chooseStationViewController = [[chooseStationView alloc] initWithNibName:@"chooseStationView" bundle:nil];
              [[self navigationController] pushViewController:chooseStationViewController animated:YES];
              [chooseStationViewController release], chooseStationViewController = nil;
          }
          else {
              chooseArrDepView *chooseArrDepViewController = [[chooseArrDepView alloc] initWithNibName:@"chooseArrDepView" bundle:nil];
              [[self navigationController] pushViewController:chooseArrDepViewController animated:YES];
              [chooseArrDepViewController release], chooseArrDepViewController = nil;
          }
      }
      else {
          [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
      }
  }
  
  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  {
      [theTable becomeFirstResponder];
      [super touchesBegan:touches withEvent:event];
  }
  
  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
      return (interfaceOrientation == UIInterfaceOrientationPortrait || 
              interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
              interfaceOrientation == UIInterfaceOrientationLandscapeRight);
  }
  
  -(void)copyStationPlist
  {
      NSString* bikesDictionaryPath = [[NSBundle mainBundle] pathForResource:@"stations" ofType:@"plist"];
      NSDictionary* bikesDictionary = [[NSDictionary alloc] initWithContentsOfFile:bikesDictionaryPath];
  
      NSArray *bikePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
      NSString *bikeDocumentsDirectory = [bikePath objectAtIndex:0];
      NSString *path = [bikeDocumentsDirectory stringByAppendingPathComponent:@"stations.plist"];
  
      NSString * error;
      NSData * data = [NSPropertyListSerialization dataFromPropertyList:bikesDictionary format:NSPropertyListXMLFormat_v1_0 errorDescription:&amp;error];
      [data writeToFile:path atomically:YES];
  }
  
  - (void)dealloc {
      [super dealloc];
  }
  
  @end
  </code></pre>
  
  <p>Offcourse, the <code>touchesBegan</code> code does not work on a <code>tableView</code> because that one takes over. How can I resign the keyboard?</p>