好的我正在尝试用UIpicker替换键盘。我得到了代码,Uipicker总是显示,当你点击文本字段时,当然键盘出现....我甚至把断点放进去看看它是否代表它告诉它隐藏了键盘,它永远不会....有人看着它,看看我哪里出错了
#import "collectionViewViewController.h"
#import "activityCell.h"
@interface collectionViewViewController ()
{
NSArray *imageArray;
NSArray *labelArray;
}
@end
@implementation collectionViewViewController
@synthesize pickerViewContainer;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//picker exists in the view, but is outside visible range
UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(200, 780, 400, 270)];
pickerView.delegate = self;
pickerView.showsSelectionIndicator = YES;
[self.view addSubview:pickerView];
[[self collectionView]setDataSource:self];
[[self collectionView]setDelegate:self];
imageArray = [[NSArray alloc]initWithObjects:
@"act_blank.png",
@"act_blank.png",
@"act_blank.png",
@"act_blank.png",
@"act_blank.png",
@"act_blank.png",
@"act_1.png",
@"act_2.png",
@"act_3.png",
@"act_4.png",
@"act_5.png",
@"act_6.png",
@"act_7.png",
@"act_8.png",
@"act_9.png",
@"act_10.png",
@"act_11.png",
@"act_12.png",
@"act_13.png",
@"act_14.png",
@"act_15.png",
@"act_16.png",
@"act_17.png",
@"act_18.png",nil];
[[self pickerView]setDataSource:self];
[[self pickerView]setDelegate:self];
arrayHour = [[NSMutableArray alloc] init];
[arrayHour addObject:@"0 h"];
[arrayHour addObject:@"1 h"];
[arrayHour addObject:@"2 h"];
[arrayHour addObject:@"3 h"];
[arrayHour addObject:@"4 h"];
[arrayHour addObject:@"5 h"];
[arrayHour addObject:@"6 h"];
[arrayHour addObject:@"7 h"];
[arrayHour addObject:@"8 h"];
arrayMinute = [[NSMutableArray alloc] init];
[arrayMinute addObject:@"0 min"];
[arrayMinute addObject:@"15 min"];
[arrayMinute addObject:@"30 min"];
[arrayMinute addObject:@"45 min"];
pickerViewContainer.hidden = YES;
//labelArray = [[NSArray alloc] initWithObjects:@"1st",@"2nd", nil];
// Do any additional setup after loading the view.
}
//animate the picker into view
- (void)textFieldDidEndEditing:(UITextField *)textField {
[UIView beginAnimations:@"picker" context:nil];
[UIView setAnimationDuration:0.5];
_pickerView.transform = CGAffineTransformMakeTranslation(0,-236);
[UIView commitAnimations];
}
//animate the picker out of view
- (void)textFieldDidBeginEditing:(UITextField *)textField {
[UIView beginAnimations:@"picker" context:nil];
[UIView setAnimationDuration:0.5];
_pickerView.transform = CGAffineTransformMakeTranslation(0,236);
[UIView commitAnimations];
}
//just hide the keyboard in this example
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return NO;
}
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectioinView
{
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return [imageArray count];
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier=@"cell";
activityCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
[[cell imageView]setImage:[UIImage imageNamed:[imageArray objectAtIndex:indexPath.item]]];
UITextField *nameLabel = (UITextField *)[cell viewWithTag:1];
nameLabel.text = @"HERRO";
//[[cell textField]setText:[labelArray objectAtIndex:indexPath.item]];
return cell;
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView
{
return 2;
}
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {
if (component == HOUR)
return [arrayHour count];
if (component == Minutes)
return [arrayMinute count];
return 0;
}
- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
if (component == HOUR)
return [arrayHour objectAtIndex:row];
if (component == Minutes)
return [arrayMinute objectAtIndex:row];
return 0;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
// static NSString *CellIdentifier=@"cell";
//
// activityCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
//
//
//
// UITextField *nameLabel = (UITextField *)[cell viewWithTag:1];
//nameLabel.text = [NSString stringWithFormat:@"%@ %@",[arrayHour objectAtIndex:[pickerView selectedRowInComponent:0]], [arrayMinute objectAtIndex:[pickerView selectedRowInComponent:1]]];
//textLabel.text = [NSString stringWithFormat:@"%@ %@",[arrayHour objectAtIndex:[pickerView selectedRowInComponent:0]], [arrayMinute objectAtIndex:[pickerView selectedRowInComponent:1]]];
//[[cell textField]setText:[labelArray objectAtIndex:indexPath.item]];
//textField.text = [NSString stringWithFormat:@"%@ %@",[arrayHour objectAtIndex:[pickerView selectedRowInComponent:0]], [arrayMinute objectAtIndex:[pickerView selectedRowInComponent:1]]];
return 0;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)viewDidUnload {
[self setCollectionView:nil];
[self setPickerView:nil];
[self setPickerViewContainer:nil];
[self setTimeText:nil];
collectionView = nil;
[super viewDidUnload];
}
- (IBAction)closePicker:(id)sender {
pickerViewContainer.hidden = YES;
}
- (IBAction)showPicker:(id)sender {
pickerViewContainer.hidden = NO;
}
@end
感谢
答案 0 :(得分:6)
请看下面这个问题here和我的答案,看看这是否有帮助。基本上,处理此问题的最佳方法是将键盘类型实际设置为UIPicker:
UIPickerView *pickerView = [[UIPickerView alloc] init];
pickerView.dataSource = self;
pickerView.delegate = self;
// ... ...
self.pickerTextField.inputView = pickerView;
将它放在viewDidLoad或某个地方,这样当用户选择UITextField时,它实际上会调出一个UIPicker。
答案 1 :(得分:1)
您没有覆盖正确的委托方法:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
<code that presentes the picker view>
return NO;
}
这应该阻止文本字段显示键盘,而是做你想做的任何事情。