Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在单击文本字段时防止表单向上滚动_Android_Ios_Sencha Touch - Fatal编程技术网

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

Android 在单击文本字段时防止表单向上滚动,android,ios,sencha-touch,Android,Ios,Sencha Touch,我有一个简单的身份验证表单,有两个文本字段和一个登录按钮(布局:xbox) 当我编辑第一个文本字段时,这个表单非常适合键盘和状态栏,但是当我切换到第二个文本字段时,表单会向上滚动一点 问题:有人知道如何防止滚动发生吗 [编辑]代码 app.views.UserLogin = function (config) { Ext.apply(this, config); this.loginField = new Ext.form.Text({ cls: 'auth-l

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

谢谢

你能给我们提供更多的信息吗?窗体是否处于向上移动的滚动视图中?可能设置滚动=否;也许一些代码会有所帮助

请注意,我谈论的是iOS开发,我刚刚发布了一条消息,您不需要指定是否在objective-c中工作。

让我补充一下我的答案,让它更有意义。视图控制器应该使用这些代理,您可能已经在这样做了

使用文本字段委托可以访问-(void)textfieldDiBeginediting:(UITextField*)发送方和-(void)textFieldDidEndEditing:(UITextField*)textField方法。当文本字段开始编辑时,可以将scrollingEnabled设置为否;当文本字段结束编辑时,可以将scrollingEnabled设置为是。它看起来像这样:

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

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

另一个选项是添加观察者,如果您使用TextView而不是TextFields(或两者的混合),这将非常有用

您可以使用此技术执行相同的操作,在keyboardWillShow方法中停止滚动,然后在keyboardWillHide方法中再次启动滚动


希望我至少能帮上一点忙。

滚动=否?这是从哪里来的?很抱歉延迟回复。您可以使用复选框禁用interface builder中的滚动,也可以使用以下命令(如需要)禁用滚动:self.scrollView.scrollEnabled=NO;这将禁用整个web视图的滚动。我只想在您输入文本字段时禁用滚动。我已尝试将textfield委托方法添加到我的应用程序委托中,但从未调用它们。我假设这是因为它们是在Javascript中生成的,而不是在Obj-C中生成的?我不知道在这种情况下如何调用Javascript。要获取要调用的委托方法(使用任何类型的委托),必须通过添加文本字段并告诉文本字段其被委托者是谁来告诉ViewController它就是委托,这样您就可以在interface builder中或在创建文本字段的任何位置执行此操作_myTextField.delegate=self;其中“self”是您刚才添加到的视图控制器。
- (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]; 
}