2011-04-16 89 views
2

我嘗試在用戶單擊UITextField時使UIPickerView顯示出來,我應該看到數據源和委託出口將它們與選取器相關聯,但是,它當我打開nib文件時不退出 - >點擊文件所有者 - >檢查員 第二個問題是當我點擊UItextField時鍵盤沒有隱藏,雖然我做了一個textFieldShouldReturn方法,它假設隱藏鍵盤。UIPickerview無法在界面生成器中找到委託和數據源插座

我在這裏錯過了什麼?

.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; 

} 

回答

2

首先,你可能不應該試圖使一個UIPickerView出現在你的時候點擊一個UITextField,因爲它不是標準的行爲(特別是如果你壓制鍵盤)。這聽起來像你需要一個標準的UIButton,當按下時提供UIPickerView,因爲這會更有意義。無論如何,如果您沒有看到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出現,因爲它可能違背了人機界面指南。

+0

嗨,thx爲您的答案,但我確實喜歡你說,沒有什麼改變:(和你的問題,我會說我的應用程序的要求迫使我這樣做 – Malloc 2011-04-16 17:28:04

+0

嗨,你可以嘗試爲UITextField實現' - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField'委託並返回NO - 這應該防止textField變得可編輯,從而防止鍵盤出現在第一位置。或者,嘗試設置UserInteractionEnabled物業給NO。 – 2011-04-16 23:03:37

相關問題