現在のiOSアプリのキーボードのツールバーにあるセグメント化されたコントロールに問題があります。基本的に、左側に[前へ/次へ]オプションと[完了]ボタンのあるセグメントコントロールがあるツールバーを備えたキーボードを作成しようとしています。すべてのセットアップが完了し、すべてが正しく起動しています。ただし、適切なテキストボックスが選択されているときに、正しいセグメントが事前に選択されていることを確認する必要があります。私が遭遇した問題は、どのテキストフィールドをクリックしても、間違ったセグメントが選択され、正しい順序で取得するために2回プッシュする必要があることです。
作成中のツールバーのコードは次のとおりです(これはViewDidLoadにあります)
keyBar = [[UIToolbar alloc] init];
[keyBar setBarStyle:UIBarStyleBlack];
[keyBar sizeToFit];
segControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Previous", @"Next", nil]];
[segControl setSegmentedControlStyle:UISegmentedControlStyleBar];
segControl.selectedSegmentIndex = 0;
[segControl addTarget:self action:@selector(segSelected:) forControlEvents:UIControlEventValueChanged];
UIBarButtonItem *segButton = [[UIBarButtonItem alloc] initWithCustomView:segControl];
UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard)];
NSArray *itemArray = [NSArray arrayWithObjects:segButton, flexButton, doneButton, nil];
[segButton release];
[flexButton release];
[doneButton release];
[keyBar setItems:itemArray];
そして、これが私のテーブルの両方のテキストフィールドにバーを追加する方法です(カスタムセルも使用して)
#pragma mark - User Name Row
if (section == 0 && row == 0) {
static NSString *TextEntryCell = @"TextCell";
TextCell *customCell = (TextCell *)[tableView dequeueReusableCellWithIdentifier:TextEntryCell];
if (customCell == nil) {
NSString *nibName = nil;
if (iPad) {
nibName = @"TextCell_iPad";
}
else {
nibName = @"TextCell";
}
NSArray *outlets = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil];
for (id currentObject in outlets) {
if ([currentObject isKindOfClass:[UITableViewCell class]]) {
customCell = (TextCell *)currentObject;
break;
}
}
}
customCell.selectionStyle = UITableViewCellSelectionStyleNone;
customCell.typeLbl.text = @"User Name:";
customCell.textField.placeholder = @"Enter User Name";
customCell.textField.returnKeyType = UIReturnKeyNext;
customCell.textField.clearButtonMode = UITextFieldViewModeWhileEditing;
customCell.textField.tag = 1;
//segControl.selectedSegmentIndex = 0;
[customCell.textField setInputAccessoryView:keyBar];
return customCell;
}
#pragma mark - Password Row
if (section == 0 && row == 1) {
static NSString *TextEntryCell = @"TextCell";
TextCell *customCell = (TextCell *)[tableView dequeueReusableCellWithIdentifier:TextEntryCell];
if (customCell == nil) {
NSString *nibName = nil;
if (iPad) {
nibName = @"TextCell_iPad";
}
else {
nibName = @"TextCell";
}
NSArray *outlets = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil];
for (id currentObject in outlets) {
if ([currentObject isKindOfClass:[UITableViewCell class]]) {
customCell = (TextCell *)currentObject;
break;
}
}
}
customCell.selectionStyle = UITableViewCellSelectionStyleNone;
customCell.typeLbl.text = @"Passphrase:";
customCell.textField.placeholder = @"Enter Passphrase";
customCell.textField.returnKeyType = UIReturnKeyGo;
customCell.textField.clearButtonMode = UITextFieldViewModeWhileEditing;
customCell.textField.tag = 2;
segControl.selectedSegmentIndex = 1;
[customCell.textField setInputAccessoryView:keyBar];
return customCell;
}
ご覧のとおり、基本的には、最初のテキストボックスが選択されたときに、セグメントコントロールの前のセグメントがすでに選択されており、2番目のテキストボックスと次のセグメントでも同じになるように設定する必要があります。しかし、これまでにどちらかのテキストボックスをクリックしたときに、2番目のセグメントが常にデフォルトで選択された項目であるため、最初のテキストフィールドでは、両方のインデックスをクリックする必要があるため、少し不格好になり、正しく機能し始めます。私がそれをした後、それは完全に機能します、しかしそれは私に問題を与えているのはその最初の表示だけです。