2016-04-06 18 views
0

Bir metnim var Fieldhangi inputView UIPickerView ve inputAccessoryView bir UIToolBar olan jobTextFiels demek. Yapılan düğmenin tıklanması (araç çubuğunda), seçiciden seçilen satırın "Diğerleri" metnini içeriyorsa stili plainTextStyle olan bir uyarı görünür. Benim sorunum, eğer kullanıcı 'diğerlerini' seçiciden seçerse ve uyarıda ekle düğmesini tıklarsa, o zaman jobTextField için normal klavye görünür. Her şeyi denedim ve her şeyden önce bu metin alanını istifa ettim ama hiçbir şey benim için işe yaramadı.UIPickerView, normal metne dönüşür TextField ile uyarıya tıklandığındaFotoğraf

-(void)viewDidLoad 
{ 
    pickerView = [[UIPickerView alloc] init]; 
    pickerView.delegate = self; 
    pickerView.dataSource = self; 
    pickerView.showsSelectionIndicator = YES; 
    pickerView.backgroundColor=[UIColor whiteColor]; 
    _jobTypeTxtFld.inputView = pickerView; 
    _genderTxtFld.inputView = pickerView; 

    UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 50)]; 
    numberToolbar.barStyle = UIBarStyleDefault; 
    numberToolbar.items = [NSArray arrayWithObjects: 
          [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)], 
          nil]; 
    [numberToolbar sizeToFit]; 
    _jobTypeTxtFld.inputAccessoryView = numberToolbar; 
    _genderTxtFld.inputAccessoryView = numberToolbar; 
} 

- (void)doneWithNumberPad{ 

    if (_jobTypeTxtFld.isFirstResponder) { 
     if ([self.jobTypeTxtFld.text isEqualToString:@"Others"]) 
     { 
      [UITextFieldAnimation moveContainerToInitialPositionWithView:self.bgView]; 
      jobAlert = [[UIAlertView alloc]initWithTitle:@"Please enter your job type" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Add",nil]; 
      jobAlert.alertViewStyle = UIAlertViewStylePlainTextInput; 
      [jobAlert show]; 
     } 
     else 
     { 
      [self.addrssTxtFld becomeFirstResponder]; 
     } 
    } 
    //[self.view endEditing:YES]; 
} 

- (void)alertView:(UIAlertView *)alertview clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
switch (buttonIndex) 
    { 
     case 0: 
     { 

     } 
      break; 

     case 1: 
     { 
      if (alertview == jobAlert) { 
       // [_jobTypeTxtFld resignFirstResponder]; 
       [[jobAlert textFieldAtIndex:0] resignFirstResponder]; 
       if ([[jobAlert textFieldAtIndex:0].text isEqualToString:@""]) 
       { 
        [UITextFieldAnimation getAlertWithTitle:@"Message" andMessage:@"Please enter your job type!"]; 
        [[jobAlert textFieldAtIndex:0] resignFirstResponder]; 
       } 
       else 
       { 
        self.jobTypeTxtFld.text = [jobAlert textFieldAtIndex:0].text; 
        [[jobAlert textFieldAtIndex:0] resignFirstResponder]; 
       } 
       [_jobTypeTxtFld resignFirstResponder]; 
      } 
     } 
      break; 
     default: 
      break; 
    } 

#pragma mark 
#pragma mark <UIPickerViewDataSource> 
#pragma mark 

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 1; 
} 

#pragma mark - picker delegate 
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    if(_jobTypeTxtFld.isFirstResponder) 
    { 
     [self.jobTypeTxtFld setText:[jobTypeArr objectAtIndex:row]]; 

    } 
    else if(_genderTxtFld.isFirstResponder) 
    { 
     NSArray *arr = @[@"Male",@"Female"]; 
     [self.genderTxtFld setText:[arr objectAtIndex:row]]; 
    } 
} 


// tell the picker how many rows are available for a given component 
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 

    if(_jobTypeTxtFld.isFirstResponder) 
    { 
     return [jobTypeArr count]; 

    } 
    else 
    { 
     return 2; 
    } 


} 

// tell the picker the title for a given component 
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    if(_jobTypeTxtFld.isFirstResponder) 
    { 
     return [jobTypeArr objectAtIndex:row]; 

    } 
    else 
    { 
     NSArray *arr = @[@"Male",@"Female"]; 
     return [arr objectAtIndex:row]; 
    } 
} 

// tell the picker the width of each row for a given component 
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { 
    int sectionWidth = 300; 

    return sectionWidth; 
} 

On Click of Resturant server

When Others is selected from picker and done button is clicked

On click of add of alerview button

on click of ok

enter image description here

+0

Hangi efekti istiyorsunuz? – zcui93

+0

Yukarıdaki ekran görüntüsünde, '' Lütfen işinizi girin '' uipickerview uipickerview görüntülenmeyecek ve en son ekran görüntüsünde UIPIckerview yanlış olan Klavye'ye dönüştü. İstediğim şey, kullanıcı tamamla düğmesini tıkladığında seçiciyi yok etmektir. –

+0

"doneWithNumberPad" içinde ikinci "if" ibaresini kaldırın, uyarı görünümünü gösteren yer burasıdır. Ya da içinde everthing kaldırmak ve uncomment '[self.view endEditing: YES];' – zcui93

cevap

0

günü beni ara butonuna yapılan tıklamayı regisignFirstResponder. Umarım bu sana yardımcı olmuştur.

+0

Her birini ve her şeyi denedim. TextField'ı istediğim gibi bitirdim Düğme tıklandığında, Uyarı görünümünde tıklayın. Ancak textField ile uyarı görüntülendiğinde tekrar görünür. Bu sorun, TextField –

+0

içeren uyarı nedeniyle oluşuyor. Daha sonra, uyarı metni içeren uyarı görünmeyecek bir durum yazmak zorundasınız –

+0

Hangi iOS'ta sorun çıkıyor? –