亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何瀏覽文本字段(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 關注
  • 668 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號