2012-02-18 108 views
3

我有一个包含两个文本框和一个登录按钮(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 
     ] 
    }); 
}; 

感谢

回答

0

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

只是为了说明我在谈论iOS开发,我刚刚发布,你不指定如果你在Objective-C中工作。

让我稍微备份我的答案,这样才更有意义。视图控制器应该使用这些代理你可能已经这样做了。使用文本字段委托可以访问 - (void)textFieldDidBeginEditing:(UITextField *)发件人和 - (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; 
} 

OR

另一种选择是添加一个观察者,如果您使用TextViews代替的TextField(或两者的混合物),这是有用的。

- (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方法再次启动它。

希望我在帮助至少一点。

+1

scrolling = NO?这是从哪里来的? – 2012-02-28 12:04:46

+0

对不起,延迟应对。您可以使用复选框在界面构建器中禁用滚动功能,或者使用编程功能(如有需要)禁用滚动功能: self.scrollView.scrollEnabled = NO; – RachelC 2012-03-08 16:31:55

+0

这将禁用整个Web视图的滚动。我只想在输入文本字段时禁用滚动功能。 – 2012-03-08 17:02:24