Uipicker取代键盘

时间:2013-02-06 21:39:31

标签: xcode replace keyboard uitextfield uipicker

好的我正在尝试用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

感谢

2 个答案:

答案 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;
}

这应该阻止文本字段显示键盘,而是做你想做的任何事情。