Возможно, вы захотите создать их программно - использование Интерфейсного Разработчика для создания 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. Как только это будет сделано, мы создаем группу UITextFields с размерами, указанными ранее, одновременно добавляя их в качестве подпредставлений scrollview и удерживая их в массиве для последующего использования (при необходимости).
Позже вы захотите переопределить метод becomeFirstResponder:
для ваших UITextFields (может быть, здесь подкласс UITextField), чтобы каждый раз, когда текстовое поле становилось первым респондентом и отображало клавиатуру, оно вызывало setContentOffset:animated:
в представлении прокрутки, чтобы отобразить себя .