UIPickerview не может найти делегат и выход источника данных в Интерфейсном Разработчике - PullRequest
2 голосов
/ 16 апреля 2011

Я пытаюсь заставить UIPickerView отображаться, когда пользователь нажимает на UITextField, я должен увидеть DataSource и делегатские выходы, чтобы связать их со сборщиком, однако он не завершается, когда я открываю nib-файл - > нажмите на владельца файла -> инспектор Вторая проблема заключается в том, что клавиатура не скрывается, когда я нажимаю на UItextField, хотя я сделал метод textFieldShouldReturn, который предполагает скрыть клавиатуру.

Что мне здесь не хватает?

.h файл:

@interface RechercherViewController : UIViewController<UIPickerViewDataSource,UIPickerViewDelegate,UITextFieldDelegate>  {

        IBOutlet UIPickerView *pickerTypesCarburants;
        IBOutlet UIView       *pickerViewTypesCarburants;
        NSMutableArray        *typesCarburantsArray;
        IBOutlet UITextField  *typeCarburantTextField;
    }
    -(IBAction)pickerTypeCarburantsShow;
    -(IBAction)pickerTypeCarburantsDone;
    @end

.m файл:

 -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView{

        return 1;

    }

    -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{

        return [typesCarburantsArray count];

    }

    -(NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger) component{


        return [typesCarburantsArray objectAtIndex:row];    



    }

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

        UITouch *touch;
        touch=[touches anyObject];
        CGPoint point=[touch locationInView:self.view];
        if(CGRectContainsPoint([typeCarburantTextField frame],point))
        {
            [self pickerTypeCarburantsShow];

        }

    }
-(IBAction)pickerTypeCarburantsDone{


    NSInteger selectedRow=[pickerTypesCarburants selectedRowInComponent:0];
    NSString *item=[typesCarburantsArray objectAtIndex:selectedRow];
    typeCarburantTextField.text=[NSString stringWithFormat:@"%@",item];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    CGAffineTransform transform=CGAffineTransformMakeTranslation(0, 480);
    pickerViewTypesCarburants.transform=transform;
    [UIView commitAnimations];


}

-(IBAction)pickerTypeCarburantsShow{

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    CGAffineTransform transform=CGAffineTransformMakeTranslation(0, 240);
    pickerViewTypesCarburants.transform=transform;
    [self.view addSubview:pickerViewTypesCarburants];
    [UIView commitAnimations];

}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{

    [textField resignFirstResponder];
    return YES;

}

1 Ответ

2 голосов
/ 16 апреля 2011

Прежде всего, вам, вероятно, не следует пытаться заставить UIPickerView появляться, когда вы нажимаете на UITextField, поскольку это не стандартное поведение (особенно, если вы подавляете клавиатуру). Похоже, вам нужен стандартный UIButton, который при нажатии представляет UIPickerView, так как это имеет больше смысла.

В любом случае, если вы не видите выходы Datasource и Delegate в IB, попробуйте применить их вручную в своем коде.

pickerTypesCarburants.delegate = self;
pickerTypesCarburants.dataSource = self;

Чтобы ответить на ваш второй вопрос, клавиатура будет скрываться только при нажатии клавиши возврата с реализованным вами методом textFieldShouldReturn. UITextField также должен будет иметь свой делегированный набор (я предполагаю, что вы делаете это в IB, которого нет в вашем файле .m). Чтобы скрыть клавиатуру, как только вы нажмете UITextField, вы должны изменить свой метод pickerTypeCarburantsShow:

-(IBAction)pickerTypeCarburantsShow{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
CGAffineTransform transform=CGAffineTransformMakeTranslation(0, 240);
pickerViewTypesCarburants.transform=transform;
[self.view addSubview:pickerViewTypesCarburants];
[UIView commitAnimations];
[typeCarburantTextField resignFirstResponder];
}

Это обеспечит немедленное скрытие клавиатуры (а не нажатие кнопки возврата). Опять же, я бы задал вопрос, почему вы хотите, чтобы при нажатии UITextField отображался UIPickerView, поскольку это, вероятно, противоречит принципам человеческого интерфейса.

...