Я использую субклассированное окно UIAlertView в качестве приглашения для входа в систему в моем приложении (я знаю, что это противоречит рекомендациям Apple, но оно не будет отправлено в магазин приложений, поэтому это не проблема).
Код для добавленияТекстовые поля и расположение окна на экране выглядит следующим образом:
- (id)initWithTitle:(NSString *)title delegate:(id)delegate
{
if (self = [super initWithTitle:title message:@"\n\n\n" delegate:delegate cancelButtonTitle:@"Cancel" otherButtonTitles:@"Login", nil]) {
UITextField *loginTF = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 55.0, 260.0, 25.0)];
// text field settings removed for code clarity
[self addSubview:loginTF];
self.loginTextField = loginTF;
[loginTF release];
UITextField *passwordTF = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 85.0, 260.0, 25.0)];
// text field settings removed for code clarity
[self addSubview:passwordTF];
self.passwordTextField = passwordTF;
[passwordTF release];
CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 90.0);
[self setTransform:translate];
}
return self;
}
Проблема с setTransform
вызов:
на iOS 3.x:
- без setTransform
: Окно отображается по центру по горизонтали и вертикали на экране, при этом экранная клавиатура отображается частично поверх него, поэтому все окно не видно
- при setTransform
: окно отображается на 90 пикселей выше, поэтому оновсе видно с экранной клавиатуры.
в iOS 4.x, однако:
- без setTransform
: окно отображается очень хорошо (видно над экранной клавиатурой)
- с setTransform
: окно отображается частично надверхняя граница экрана (на 90 пикселей выше).
Какое решение будет лучшим для этой проблемы?Определение версии iOS и условный вызов setTransform
?Или это слишком уродливый хак и есть какой-то лучший способ?