Запретить прокрутку формы при нажатии на текстовое поле - PullRequest
3 голосов
/ 19 февраля 2012

У меня есть простая форма аутентификации с двумя текстовыми полями и кнопкой входа в систему (layout: xbox). Эта форма идеально подходит между клавиатурой и строкой состояния, когда я редактирую первое текстовое поле, но когда я переключаюсь на второе текстовое поле,форма немного прокручивается вверх.

Вопрос: Кто-нибудь знает, как предотвратить прокрутку?

[ПРАВИТЬ] Код

app.views.UserLogin = function (config) {
    Ext.apply(this, config);

    this.loginField = new Ext.form.Text({
        cls: 'auth-login',
        width:"100%",
        allowBlank: false,
        placeHolder:'Identifiant',
        border:'0 0 1 0',
    });

    this.passwordField = new Ext.form.Password({
        cls: 'auth-password',
        width:"100%",
        allowBlank: false,
        placeHolder:'Mot de passe',
        border:'0',
    });

    this.loginBtn = new Ext.Button({
        width:"200px",
        text: "Connect",
        handler: this.onLoginBtnFn,
        scope: this,
        cls:'auth-button',
    });

    this.authFieldSet = new Ext.form.FieldSet({
        width:"90%",
        cls:'auth-fieldset',
        items:[this.loginField,this.passwordField]
    });

    //constructor
    app.views.UserLogin.superclass.constructor.call(this, {
        //dockedItems: [this.toolbar],
        fullscreen: true,
        cls:'auth',
        layout: 'vbox',
        items: [
            this.authFieldSet,
            this.loginBtn
        ]
    });
};

Спасибо

1 Ответ

0 голосов
/ 28 февраля 2012

Не могли бы вы дать нам больше информации? Форма в виде прокрутки движется вверх? Возможно настройка прокрутки = НЕТ; Может быть, какой-то код поможет.

Просто чтобы отметить, что я говорю о разработке для iOS, я только что выпустил, что вы не указываете, работаете ли вы в target-c.

Позвольте мне немного подкрепить свой ответ, чтобы он имел больше смысла. Контроллер представления должен использовать эти делегаты, вы, вероятно, уже делаете это.

Использование делегата текстового поля позволяет получить доступ к методам - ​​(void) textFieldDidBeginEditing: (UITextField *) и textField - (void) textFieldDidEndEditing: (UITextField *) Когда текстовое поле начинает редактирование, вы можете установить scrollingEnabled = NO, а когда текстовое поле завершает редактирование, вы можете установить scrollingEnabled = YES. Это будет выглядеть примерно так:

-(void)textFieldDidBeginEditing:(UITextField *)sender
{
self.currentTextField = sender;
self.scrollView.scrollingEnabled = NO;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
self.currentTextField = nil;
self.scrollView.scrollingEnabled = YES;
}

OR

Другой вариант - добавить наблюдателя, это полезно, если вы используете TextViews вместо TextFields (или их комбинацию).

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:self.view.window]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:self.view.window]; 
}

- (void)viewWillDisappear:(BOOL)animated
{
[_currentTextField resignFirstResponder];
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil]; 
}

Вы делаете то же самое с этой техникой, в методе keyboardWillShow прекратите прокрутку и снова запустите ее в методе keyboardWillHide.

Надеюсь, я помогу хоть немного.

...