0

カスタム レイアウトのコレクション ビューがあります。ユーザーが更新できるテキスト フィールドが含まれており、配列に保存されます。テキスト フィールドはコレクション ビュー セル全体を占め、基本的には Microsoft Excel などのように表示され、水平および垂直にスクロールします。

問題は、テキスト フィールドに数値を入力し、Return キーを押さずにコレクション ビューをスクロールすると、セルがデキューされ、インデックス パスが null になることです。

コレクション ビューがスクロールされた場合、テキスト フィールドの編集を終了したいと思います。

textFieldDidEndEditing に使用するコードは次のとおりです。

- (void)textFieldDidEndEditing:(UITextField *)textField {
UICollectionViewCell *selectedCell = (UICollectionViewCell *)[[textField superview] superview];
UICollectionView *collectionViewForSelection = (UICollectionView *)[selectedCell superview];
NSIndexPath *textFieldIndexPath = [collectionViewForSelection indexPathForCell:selectedCell];

if (textFieldIndexPath != NULL) {
[[_collectionArray objectAtIndex:textFieldIndexPath.section] replaceObjectAtIndex:textFieldIndexPath.row withObject:textField.text];
[self saveArray];
}
}

運が悪かったので、試したコードを投稿しませんでした。

これを行う方法に関する提案はありますか?

4

1 に答える 1

1

UICollectionViewは UIScrollView のサブクラスであるため、デリゲート scrollViewDidScroll でアクティブ テキスト フィールドの rejectFirstResponder を呼び出すことができます。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    //resign the first responder of the active text field
    [self.view endEditing:YES];
}

ビューには多くのテキスト フィールドがあるため、ビュー自体でendEditingを呼び出すことができます。

終了編集:

ビュー (またはビューに埋め込まれたテキスト フィールドの 1 つ) がファーストレスポンダー ステータスを辞任します。

于 2013-06-06T04:23:09.267 に答える