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 ответа

Решение

Вы не переопределяете правильный метод делегата:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    <code that presentes the picker view>
    return NO;
}

Это должно помешать текстовому полю показывать клавиатуру, и вместо этого делать все, что вы хотите.

Посмотрите на этот вопрос здесь и мой ответ ниже, посмотрите, поможет ли это. По сути, лучший способ справиться с этим - установить тип клавиатуры в UIPicker:

UIPickerView *pickerView = [[UIPickerView alloc] init];
pickerView.dataSource = self;
pickerView.delegate = self;
// ... ...
self.pickerTextField.inputView = pickerView;

Поместите это в ваш viewDidLoad или куда-нибудь, чтобы, когда пользователь выбирает UITextField, он фактически вытягивал UIPicker.

Другие вопросы по тегам