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

Posted

技术标签:

【中文标题】单击文本字段时防止表单向上滚动【英文标题】:Prevent form from scrolling up when click on textfield 【发布时间】:2012-02-18 21:51:07 【问题描述】:

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

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

请注意我在谈论 iOS 开发,我刚刚发布了您没有指定您是否在 Objective-c 中工作。

让我稍微支持一下我的答案,这样更有意义。视图控制器应该使用这些委托,您可能已经这样做了。

使用文本字段委托可以访问 - (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方法中重新开始。

希望我能帮上点忙。

【讨论】:

滚动=否?这是哪里来的? 抱歉延迟回复。您可以使用复选框禁用界面生成器中的滚动,或者以编程方式(根据您的需要)使用:self.scrollView.scrollEnabled = NO; 这将禁用整个 web 视图的滚动。我只想在您输入文本字段时禁用滚动。 我尝试将文本字段委托方法添加到我的应用委托中,但它们从未被调用。我认为这是因为它们是用 javascript 而不是 Obj-C 生成的? 我不知道在这种情况下如何调用 Javascript。要调用委托方法(使用任何类型的委托),您必须通过添加 告诉 ViewController 它是委托,并告诉文本字段它的委托是谁,因此您可以在界面构建器或任何地方执行此操作你创建你的文本字段 _myTextField.delegate = self;其中 'self' 是您刚刚添加 到的视图控制器。

以上是关于单击文本字段时防止表单向上滚动的主要内容,如果未能解决你的问题,请参考以下文章

使用 phonegap 防止键盘在 iOS 应用程序中向上推 webview

有啥办法可以防止 FormBuilder 元素滚动到页面顶部?

防止焦点 div 使用箭头键滚动

在 iPad 上,如何防止模态视图在键盘呈现时向上移动?

防止 Access 表单中的整个字段被突出显示

将网页输入字段滚动到顶部防止被软键盘隐藏