我有一个iPad应用程序,里面有一个注册表单。表单是非常基本的,只包含两个UITextFields,用于Name&电子邮件地址。
第一个TextField用于候选人名称,当他们输入他们的名字并按下键盘上的“下一步”时,我希望它自动移动到下一个电子邮件地址TextField进行编辑。
知道如何设置键盘的下一个按钮以跳转到下一个键盘吗?
由于
答案 0 :(得分:73)
您需要将视图控制器设置为UITextField委托,并实现UITextField委托方法:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if (textField == nameField) {
[textField resignFirstResponder];
[emailField becomeFirstResponder];
} else if (textField == emailField) {
// here you can define what happens
// when user presses return on the email field
}
return YES;
}
Swift版本:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == nameField {
textField.resignFirstResponder()
emailField.becomeFirstResponder()
} else if textField == emailField {
// here you can define what happens
// when user presses return on the email field
}
return true
}
您可能还想滚动视图以使emailField可见。如果您的视图控制器是UITableViewController的一个实例,这应该会自动发生。如果没有,您应该阅读this Apple document,尤其是移动位于键盘下的内容部分。
答案 1 :(得分:10)
除了@lawicko的回答之外,我经常更改按钮文字以提供最后的结束触摸(例如,当有更多字段时显示next
,然后在最后一个时显示done
):
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
BOOL isLastTextField = //.. your logic to figure out if the current text field is the last
if (isLastTextField) {
textField.returnKeyType = UIReturnKeyDone;
} else {
textField.returnKeyType = UIReturnKeyNext;
}
}
答案 2 :(得分:10)
正确答案的Swift版本。
根据我的经验,切换textFields时不需要resignFirstResponder。
在此示例中,它只是您的基本用户名和密码textFields。
用户名的故事板中的键盘“返回键”设置为“下一步”,密码设置为“完成”。
然后只需连接这两个文本字段的代理人并添加此扩展程序即可完成。
extension LoginViewController: UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == textFieldPassword {
self.view.endEditing(true)
} else {
textFieldPassword.becomeFirstResponder()
}
return true
}
}
答案 3 :(得分:5)
更加一致和强大的方法是使用NextResponderTextField 您可以完全从界面构建器配置它。
您需要做的就是
UITextField
的班级类型设为NextResponderTextField
nextResponderField
的出口设置为指向下一个响应者,它可以是任何UITextField
或任何UIResponder
子类。它也可以是一个UIButton,并且该库足够聪明,只有在启用时才能触发按钮的TouchUpInside
事件。
这是正在运行的库:
答案 4 :(得分:2)
Swift 4 扩展程序。只需传递setUSDValue() {
const { AmountCharged, Currency, FYSigned} = this.state;
if(AmountCharged && Currency && FYSigned)
{
fetch(`http://ca-fpscfb2:2000/USDValueExchangeRateValue?rateYear=${FYSigned}&USD=${Currency}&CAD=${Currency}&INR=${Currency}&GBP=${Currency}`)
.then(response => response.json().then(response =>
this.setState(
{
exchangeRateVal: response.data
},
() =>
this.state.exchangeRateVal.map((rate) =>
(
this.setState({
USDValue: rate.USD
})
))
)))
}
数组,它将把每个数组连接到下一个数组,直到最后一个退出第一个响应者(隐藏键盘):
UITextFields
答案 5 :(得分:0)
- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
if (textField == self.textFieldName)
{
[self.textFieldName resignFirstResponder];
[self.textFieldPassword becomeFirstResponder];
}
else if (textField == self.textFieldPassword)
{
[self.textFieldPassword resignFirstResponder];
[self login:self];
}
return true;
}
@interface MLLoginViewController ()<UITextFieldDelegate>
@end
@implementation MLLoginViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.textFieldName.delegate = self;
self.textFieldPassword.delegate = self;
答案 6 :(得分:0)
为文本字段创建一个插座,然后
<强> viewController.h 强>
(IBAction)textFieldDoneEditing:(id)sender;
<强> viewController.m 强>
(IBAction)textFieldDoneEditing:(id)sender {
[textField resignFirstResponder];
if (textField == nameField) {
[emailField becomeFirstResponder];
}
}
建立(显示连接检查器&gt;已发送事件)didEndOnExit和textFieldDoneEditing
之间的关系