1 つのビューで 40 ~ 50 個を超えるテキスト フィールドとラベルを作成するにはどうすればよいですか? テキスト フィールドが選択されている場合、キーボードはテキスト フィールドを非表示にしないようにする必要があります。
1 に答える
おそらくプログラムで作成したいと思うでしょう。Interface Builder を使用して 40 ~ 50 個のテキストフィールドを作成すると、かなり時間がかかります。
キーボードに関しては、メインの UIView をスクロール可能にすることができます。その後、キーボードが表示されるたびに、どのテキストフィールドが選択されているかを確認し、画面の上半分までスクロールします。(アプリケーションが回転可能な場合は、向きによって「画面の上半分」の定義が変わることを確認してください。)
このアイデアのサンプル コード:
// Determine some basic info
int numberOfTextfields = 50;
int textfieldHeight = 40;
int textfieldWidth = 200;
// Create the UIScrollView
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:
CGRectMake(0, 0,
numberOfTextfields*textfieldHeight,
textfieldWidth)];
// Create all the textfields
NSMutableArray *textfields = [NSMutableArray arrayWithCapacity:
(NSUInteger)numberOfTextfields];
for(int i = 0; i < numberOfTextfields; i++) {
UITextField *field = [[UITextField alloc] initWithFrame:
CGRectMake(0,
i*textFieldHeight,
textFieldHeight,
textFieldWidth)];
[scrollView addSubview:field];
[textfields addObject:field];
}
このコードでは、最初にテキスト フィールドの動作 (位置、外観、および数) を決定するいくつかの変数を設定し、次にマスター UIScrollView を作成します。それが完了したら、以前に指定したサイズで一連の UITextField を作成し、それらを同時にスクロールビューのサブビューとして追加し、後で参照できるように配列に保持します (必要な場合)。
後で、becomeFirstResponder:
UITextFields のメソッドをオーバーライドして (おそらくここでは UITextField をサブクラス化します)、テキストフィールドがファーストレスポンダーになり、キーボードsetContentOffset:animated:
が表示されるたびに、スクロールビューを呼び出してそれ自体を表示するようにします。