2014-03-26 2 views
1

내보기에 두 개의 텍스트 필드가 있습니다. 내가 입력으로 피커보기를 사용하고 있습니다. 피커가 활성화되어있을 때 키보드가 선택기 뒤에 표시됩니다. 다른 문제는 키보드의 뒤가있는 선택기를 처음 표시 할 때 액션의 텍스트 필드에 첫 번째 응답자를 사용하지 않는 경우입니다.하지만 두 번째로 텍스트 필드는 피커 대신 키 보드가 나타납니다. 여기 내 코드가있다.피커보기 뒤의 UIKeyboard

- (IBAction)selectService:(id)sender 
    { 

    [self createActionSheet]; 

//[selectServiceTextBox resignFirstResponder]; 

    pickerType = @"servicePickerType"; 

    servicePicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 44.0, 0.0, 0.0)]; 

    pickerArray = [[NSArray alloc]initWithObjects:@"Money Transfer",@"Bill Payment", nil]; 

    servicePicker.dataSource = self; 

    servicePicker.delegate = self; 

    servicePicker.showsSelectionIndicator = YES; 

    [actionSheet addSubview:servicePicker]; 

    // rowIndex = [stateTextField.text intValue]; 

    //[servicePicker selectRow:rowIndex inComponent:0 animated:NO]; 


} 

- (IBAction)wayOfTransfer:(id)sender 
    { 
    if ([selectedItem isEqualToString:@""]) 
    { 

     NSLog(@"empty selection"); 
    } 
    else if ([selectServiceTextBox.text isEqualToString:@"Money Transfer"]) 
    { 

     [self createActionSheet]; 

     // [secondTextBox resignFirstResponder]; 

     //[selectServiceTextBox resignFirstResponder]; 

     pickerType = @"MoneyTransferMethod"; 

     servicePicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 44.0, 0.0, 0.0)]; 

     pickerArrayTwo = [[NSArray alloc]initWithObjects:@"Cash Pick-up",@"Bank Account",@"Zym Card", nil]; 

     servicePicker.dataSource = self; 

     servicePicker.delegate = self; 

     servicePicker.showsSelectionIndicator = YES; 

     [actionSheet addSubview:servicePicker]; 

    } 
} 
+0

그 당시 열린 pickerview 키보드를 닫으십시오. –

+0

처음으로 잘 작동 했어요. 그러나 나는 텍스트 상자를 다시 클릭한다. 키보드가 피커보기 대신 나타납니다 – iOSDeveloper

답변

1

당신은이를이 코드를 넣어 ... 간단한 당신이 선택기보기 뒤에 숨어 키보드를 필요가 있다고 생각 피커와 키보드를 서로 배타적으로 보이게하여 둘 사이를 적절하게 전환 할 수 있습니다. 한 가지 방법은 피커를 기본적으로 숨기고 첫 번째 텍스트 뷰에 포커스가있을 때 화면에 표시하는 것입니다. 애니메이션 ... 마찬가지로 두 번째 textview를 사용하여 키보드를 가져 오는 동안 그것을 숨 깁니다.

나는 이것이 당신이하고자하는 것입니다 희망 ...이 작업을 수행하고 테스트 한 샘플 프로젝트를 만든

...

//ViewController.h 
#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController<UITextViewDelegate,UIPickerViewDataSource,UIPickerViewDelegate> 

@property (weak, nonatomic) IBOutlet UITextView *firstTextView; 
@property (weak, nonatomic) IBOutlet UITextView *secondTextView; 
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView; 
@end 

//ViewController.m 
#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController{ 
    NSMutableArray *pickerDataSource; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    pickerDataSource = [[NSMutableArray alloc] initWithObjects:@"data1",@"data2", nil]; 

    self.pickerView.frame = CGRectMake(0, self.view.frame.size.height, 320, 162); 

    self.pickerView.delegate = self; 
    self.pickerView.dataSource = self; 

} 

// Textview delegates 
-(void)textViewDidBeginEditing:(UITextView *)textView{ 
    if ([textView isEqual:self.firstTextView]) { 
     [textView resignFirstResponder]; 

     if (self.pickerView.frame.origin.y >= self.view.frame.size.height) { 
      [self showPicker]; 
     }else{ 
      [self hidePicker]; 
     } 
    }else{ 
     [self hidePicker]; 
     [self.secondTextView becomeFirstResponder]; 


    } 
} 

-(void)showPicker{ 
    [UIView animateWithDuration:0.2 animations:^{ 
     self.pickerView.frame = CGRectMake(self.pickerView.frame.origin.x, self.pickerView.frame.origin.y - self.pickerView.frame.size.height, self.pickerView.frame.size.width, self.pickerView.frame.size.height); 
    }]; 

} 

-(void)hidePicker{ 
    [UIView animateWithDuration:0.2 animations:^{ 
     self.pickerView.frame = CGRectMake(self.pickerView.frame.origin.x, self.pickerView.frame.origin.y + self.pickerView.frame.size.height, self.pickerView.frame.size.width, self.pickerView.frame.size.height); 
    }]; 
} 

// Picker Delegates 

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ 
    return 1; 
} 
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ 
    return pickerDataSource.count; 
} 
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ 
    self.firstTextView.text = pickerDataSource[row]; 
} 
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ 
    return [pickerDataSource objectAtIndex:row]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

날 경우 알려 주시기 바랍니다 불명확 한 것이있다.

1

난 당신이 텍스트를 클릭 동작 방법에 의 UITextField의 위임 방법 .....

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
[text_box_variable resignFirstResponder]; 
} 
+0

처음 작동하지만 두 번째로 피커보기를 표시하는 대신 키보드를 표시합니다 – iOSDeveloper

+1

이 코드를 uitextfield 대리자 메서드에 넣어야합니다 -> - (void) textFieldDidBeginEditing : (UITextField *) textField { [text_box_variable resignFirstResponder]; } –

+0

이제 여러 번 텍스트 필드를 터치 할 수 있습니다.이 코드 전체를 돕기를 바랍니다. –