Iphone 辞职第一响应者

Iphone 辞职第一响应者,iphone,objective-c,uitableview,iphone-sdk-3.0,Iphone,Objective C,Uitableview,Iphone Sdk 3.0,我在更换键盘时有点问题。我有一张有两部分的桌子。在第二部分中,我加载类stationStartCellNumber,它有一个UITextField 当我按下UITextField之外的任何位置时,我希望键盘放弃作为第一响应者的身份,从而关闭键盘。它在我的手机内工作正常,但在我的UITableView上不工作 这是我的代码: StationViewController.h: #import <UIKit/UIKit.h> #import "stationenStartCell.h" #

我在更换键盘时有点问题。我有一张有两部分的桌子。在第二部分中,我加载类
stationStartCellNumber
,它有一个
UITextField

当我按下
UITextField
之外的任何位置时,我希望键盘放弃作为第一响应者的身份,从而关闭键盘。它在我的手机内工作正常,但在我的
UITableView
上不工作

这是我的代码: StationViewController.h

#import <UIKit/UIKit.h>
#import "stationenStartCell.h"
#import "stationenAppDelegate.h"

@interface stationenViewController : UIViewController  <UITableViewDelegate, UITableViewDataSource> {
    IBOutlet UITableView *theTable;

    NSString *stationenPlistPath;
}

@property (nonatomic, retain) UITableView *theTable;
@property (nonatomic, retain) IBOutlet NSString *stationenPlistPath;

- (void)copyStationPlist;
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;

@end
#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:&error];
    [data writeToFile:path atomically:YES];
}

- (void)dealloc {
    [super dealloc];
}

@end

当然,
touchsbegind
代码在
tableView
上不起作用,因为它接管了工作。如何退出键盘?

您可以创建一个不可见的UIButton,并执行退出键盘的操作


此外,您还需要确保滚动表格视图,以便键盘不会覆盖文本字段。

您可以将
UITableView
子类化,并使用它代替标准的
UITableView
。为什么?因为你可以像这样做smth

每次触摸桌子时都会调用此方法。因此,在这个方法中,您可以将您的
textField
改为
firstResponder

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touvhesBegan:touches withRvrnt:event];
}