我在调整键盘时遇到了一些问题。我有一个有两个部分的桌子。在第二部分中,我加载了具有stationenStartCellNumber
的类UITextField
。
当我按下UITextField
之外的任何地方时,我希望键盘作为第一响应者辞职,从而关闭键盘。它在我的单元格中完美运行,但不在UITableView
上。
这是我的代码: 的 stationenViewController.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
stationenViewController.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
上运行,因为该代码接管了。我该如何辞退键盘?
答案 0 :(得分:2)
您可以继承UITableView
并使用它而不是标准UITableView
。为什么?因为你可以像这样做什么
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [super touvhesBegan:touches withRvrnt:event]; }
每次触摸桌子时都会调用此方法。因此,您可以将textField
作为firstResponder
在此方法中重新签名。
答案 1 :(得分:0)
您可以使用操作来创建一个不可见的UIButton来重新签名键盘。
此外,您需要确保滚动表格视图,以便键盘不会覆盖您的文本字段。