单击文本字段时防止表单向上滚动

时间:2012-02-18 21:51:07

标签: android ios sencha-touch

我有一个简单的身份验证表单,包含两个文本字段和一个登录按钮(布局: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 :(得分:0)

您能否提供更多信息?滚动视图中的表单是否向上移动?可能设置滚动=否;也许一些代码会有所帮助。

请注意我在谈论iOS开发时,我刚刚发布了你没有说明你是否在Objective-c中工作。

让我回答一下我的答案,这样更有意义。视图控制器应该使用您可能已经执行此操作的这些委托。

使用文本字段委托alows访问 - (void)textFieldDidBeginEditing:(UITextField *)sender和 - (void)textFieldDidEndEditing:(UITextField *)textField方法。当ttext字段开始编辑时,您可以设置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;
}

另一种选择是添加一个观察者,如果您使用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方法中再次启动它。

希望我至少帮助一点。