0

1 つのビューで 40 ~ 50 個を超えるテキスト フィールドとラベルを作成するにはどうすればよいですか? テキスト フィールドが選択されている場合、キーボードはテキスト フィールドを非表示にしないようにする必要があります。

4

1 に答える 1

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:が表示されるたびに、スクロールビューを呼び出してそれ自体を表示するようにします。

于 2009-05-19T13:12:12.427 に答える