代码之家  ›  专栏  ›  技术社区  ›  Paul Peelen

辞职第一响应者

  •  0
  • Paul Peelen  · 技术社区  · 15 年前

    我有一个小问题辞职键盘。我有一张两部分的桌子。在第二部分中,我加载类 stationenStartCellNumber 哪个有 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
    

    stationViewController.m :

    #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
    

    当然了, touchesBegan 代码不适用于 tableView 因为那个人接手了。我怎样才能放弃键盘?

    2 回复  |  直到 11 年前
        1
  •  0
  •   gerry3    15 年前

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

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

        2
  •  2
  •   etolstoy    11 年前

    你可以子类化 UITableView 用它代替标准 UITababVIEW . 为什么?因为你可以这样做

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

    每次您触摸桌子时都会调用此方法。所以你可以辞职 textField 作为 firstResponder 在这个方法里面。

    推荐文章