キーボード ツールバーに 2 つのボタンがあります。次のボタンは常に最後のフィールドをファーストレスポンダとして設定し、中間のフィールドはすべてスキップします。さらに、このキーボード ツールバーも最後のフィールドに表示されません。私はすべてのテキストフィールドとテキストビューオブジェクトを格納する配列を取得し、次と前のクリックでこの配列を使用して、私のコードに続く最初のレスポンダーになるオブジェクトを決定します。
これは、キーボードツールバーを作成する場所です
-(void)createInputAccessoryView
{
self.keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, 44)];
self.keyboardToolbar.barStyle = UIBarStyleBlackOpaque;
self.keyboardToolbar.tintColor = [UIColor clearColor];
UIButton *previousButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 40)];
[previousButton setTitle:@"Previous" forState:UIControlStateNormal ];
[previousButton setBackgroundColor:[UIColor clearColor]];
[previousButton addTarget:self action:@selector(gotoPrevTextfield) forControlEvents:UIControlStateNormal];
UIButton *nextButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 40)];
[nextButton setTitle:@"Next" forState:UIControlStateNormal];
[nextButton setBackgroundColor:[UIColor clearColor]];
[nextButton addTarget:self action:@selector(gotoNextTextfield) forControlEvents:UIControlStateNormal];
//_btnPrev = [[UIBarButtonItem alloc] initWithCustomView:previousButton];
//_btnNext = [[UIBarButtonItem alloc] initWithCustomView:nextButton];
_btnPrev =[[UIBarButtonItem alloc]initWithTitle:@"Previous" style:UIBarButtonItemStylePlain target:self action:@selector(gotoPrevTextfield)];
_btnNext=[[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStylePlain target:self action:@selector(gotoNextTextfield)];
[self.keyboardToolbar setItems:[NSArray arrayWithObjects:_btnPrev,_btnNext,nil] animated:NO];}
これは、オブジェクトの配列を作成する場所です
-(void)addTextFieldObjectsToArray
{
textFieldsArray = [[NSMutableArray alloc]initWithCapacity:22];
[textFieldsArray addObject:companyNameFieldObj];
[textFieldsArray addObject:contactPersonFieldObj];
[textFieldsArray addObject:customerPhoneFieldObj];
[textFieldsArray addObject:customerEmailFieldObj];
[textFieldsArray addObject:distributorNameFieldObj];
[textFieldsArray addObject:distributorSalespersonFieldObj];
[textFieldsArray addObject:distributorPhoneFieldObj];
[textFieldsArray addObject:distributorEmailFieldObj];
[textFieldsArray addObject:closetStandardFieldObj];
[textFieldsArray addObject:cylinderVelocityFieldObj];
[textFieldsArray addObject:cycleRateFieldObj];
[textFieldsArray addObject:operatingPressureFieldObj];
[textFieldsArray addObject:cylinderMountFieldObj];
[textFieldsArray addObject:wieghtOfRodAttachmentFieldObj];
[textFieldsArray addObject:rodAttachmentFieldObj];
[textFieldsArray addObject:sideAttchementFieldObj];
[textFieldsArray addObject:environmentConsiderationFieldObj];
[textFieldsArray addObject:ambientTempFieldObj];
[textFieldsArray addObject:quantityFieldObj];
[textFieldsArray addObject:competitorFieldObj];
[textFieldsArray addObject:currentApplicationIssuesFieldObj];
[textFieldsArray addObject:modificationRequiredTextViewObj];}
ここに私の次と前のボタンコードがあります
-(void)gotoPrevTextfield{
for(int i=1 ;i<22;i++)
{
if([textFieldsArray [i] isFirstResponder])
{
[textFieldsArray[i-1] becomeFirstResponder];
[textFieldsArray [i] resignFirstResponder];
break;
}
}}
-(void)gotoNextTextfield
{
NSLog(@"%s","inside next Field");
for( int i=0 ;i<21;i++)
{
if([textFieldsArray [i] isFirstResponder])
{
[textFieldsArray [i+1] becomeFirstResponder];
[textFieldsArray [i] resignFirstResponder];
break;
}
}}
テキストフィールドがクリックされたときに、テキストフィールドとテキストビューの両方にdidbeginediting関数を使用します..これ が私のfuncコードです
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
_txtActiveField = textField;
[self.txtActiveField setInputAccessoryView:self.keyboardToolbar];
}}
- (void)textViewDidBeginEditing:(UITextView *)textView
{
if ([textView isFirstResponder]) {
_txtActiveView =textView;
[self.txtActiveView setInputAccessoryView:self.keyboardToolbar];
}}
最後のオブジェクトは textview で、その他はテキスト フィールドです。すべてのフィールドがスキップされ、次のボタンのクリック時に最後のフィールドがファーストレスポンダーとして設定されている理由を理解するのを手伝ってください