そのため、UIKeyboard の上に移動する UIToolbar を作成しています。メソッドを呼び出して UITableView をリロードするまで、完了ボタンは完全に機能します。その後、完了ボタンのコールバック関数 (つまり、done:) を除いて、すべてが引き続き機能します。これがなぜなのか誰か知っていますか?次のコードを使用して、ツールバーを備えたカスタム UITableView サブクラスを作成しています...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section != 1){
if (indexPath.row != 2){
static NSString *CellIdentifier = @"EditableCell";
EditableCell *editableCell = (EditableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (editableCell == nil) {
editableCell = [[EditableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
[_myTextField setPlaceholder:@"$0.00"];
[_myTextField setKeyboardType:UIKeyboardTypeDecimalPad];
UIToolbar *toolbar = [[UIToolbar alloc] init];
[toolbar setBarStyle:UIBarStyleBlackTranslucent];
[toolbar sizeToFit];
UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard)];
doneButton.title = @"Done";
NSArray *itemsArray = [NSArray arrayWithObjects:doneButton, nil];
[toolbar setItems:itemsArray];
[_myTextField setInputAccessoryView:toolbar];
}
[_myTextField setReturnKeyType:UIReturnKeyNext];
}
else if (indexPath.section == 1){
[_myTextField setPlaceholder:@"Describe this food..."];
[_myTextField setReturnKeyType:UIReturnKeyDone];
}
_myTextField.delegate = self;
return editableCell;
}
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if([text isEqualToString:@"\n"])
[textView resignFirstResponder];
else{
NSMutableString *textFieldString = [[NSMutableString alloc] initWithString:textView.text];
[textFieldString replaceCharactersInRange:range withString:text];
_textViewString = @"";
_textViewString = textFieldString;
_foodDescription = textFieldString;
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
return YES;
}