为了账号安全,请及时绑定邮箱和手机立即绑定

如何浏览文本字段(Next/Done按钮)

如何浏览文本字段(Next/Done按钮)

翻阅古今 2019-07-13 16:35:37
如何使用iPhone键盘上的“下一步”按钮浏览所有文本字段?最后一个文本字段应该关闭键盘。我已经设置了IB按钮(下一个/完成),但现在我被卡住了。我实现了textFieldShouldRe转折点操作,但是现在下一个按钮关闭键盘。
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

在Cocoa for MacOSX中,您有下一个响应链,您可以在其中询问文本字段接下来应该关注什么控件。这就是使文本字段之间的选项卡工作的原因。但是由于iOS设备没有键盘,只有触摸,这一概念在过渡到CocoaTouch之后并没有存活下来。

无论如何,只要有两个假设,这是很容易做到的:

  1. 所有“可表”

    UITextField

    S在同一个父视图上。
  2. 它们的“制表符顺序”由Tag属性定义。

假设您可以重写textFieldShouldRe转折点:如下所示:

-(BOOL)textFieldShouldReturn:(UITextField*)textField{
  NSInteger nextTag = textField.tag + 1;
  // Try to find next responder
  UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
  if (nextResponder) {
    // Found next responder, so set it.
    [nextResponder becomeFirstResponder];
  } else {
    // Not found, so remove keyboard.
    [textField resignFirstResponder];
  }
  return NO; // We do not want UITextField to insert line-breaks.}

添加更多的代码,这些假设也可以被忽略。

SWIFT 4.0

 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    let nextTag = textField.tag + 1
    // Try to find next responder
    let nextResponder = textField.superview?.viewWithTag(nextTag) as UIResponder!

    if nextResponder != nil {
        // Found next responder, so set it
        nextResponder?.becomeFirstResponder()
    } else {
        // Not found, so remove keyboard
        textField.resignFirstResponder()
    }

    return false}

如果文本字段的SuperView将是UITableViewCell,那么下一个响应程序将是

let nextResponder = textField.superview?.superview?.superview?.viewWithTag(nextTag) as UIResponder!


查看完整回答
反对 回复 2019-07-13
?
临摹微笑

TA贡献1982条经验 获得超2个赞

这是我对这个问题的解决办法。

为了解决这个问题(而且我讨厌依赖标记来做事情),我决定向UITextField对象添加一个自定义属性。换句话说,我在UITextField上创建了一个类别,如下所示:

UITextField+Extended.h

@interface UITextField (Extended)@property(retain, nonatomic)UITextField* nextTextField;@end

UITextField+Extended.m

#import "UITextField+Extended.h"#import <objc/runtime.h>static char defaultHashKey;@implementation UITextField (Extended)- (UITextField*) 
nextTextField { 
    return objc_getAssociatedObject(self, &defaultHashKey); }- (void) setNextTextField:(UITextField *)nextTextField{
    objc_setAssociatedObject(self, &defaultHashKey, nextTextField, OBJC_ASSOCIATION_RETAIN_NONATOMIC); }@end

现在,我是如何使用它的:

UITextField *textField1 = ...init your textfieldUITextField *textField2 = ...init your textfieldUITextField *textField3 = ...
init your textfield

textField1.nextTextField = textField2;textField2.nextTextField = textField3;textField3.nextTextField = nil;

并实现textFieldShouldRe转折点方法:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {

    UITextField *next = theTextField.nextTextField;
    if (next) {
        [next becomeFirstResponder];
    } else {
        [theTextField resignFirstResponder];
    }

    return NO; }

我现在有了一个UITextField的链接列表,每个人都知道下一个是谁。

希望能帮上忙。


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 639 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信