iOS 界面刷新時(shí) 保持UITextField UITextView UISearchBar 響應(yīng),保持鍵盤一直打開,并可在刷新后指定定位到某輸入框作為第一響應(yīng)者

github: ContinueFirsterResponder

iOS 界面刷新時(shí) 保持UITextField UITextView UISearchBar 響應(yīng),保持鍵盤一直打開,并可在刷新后指定定位到某輸入框作為第一響應(yīng)者

只需要一行代碼即可

使用

將

UIView+RZContinueFirstResponder.h
UIView+RZContinueFirstResponder.m

文件放到自己的項(xiàng)目中

在需要使用的地方添加

#import "UIView+RZContinueFirstResponder.h"

  • 如果界面刷新時(shí),無新增或刪除文本框,則不需要做任何處理,直接使用
// 刷新方法寫這里,將保持之前的第一響應(yīng)的文本框
[_tableView rzContinueFirstResponderAndExecuteCode:^(UIViewResponderHelper *nextResponder) {
    // 將刷新界面的方法寫到這里,不用擔(dān)憂這里會有block循環(huán)引用的問題
    [_tableView reloadData];
}];
  • 如果界面刷新時(shí),有新增或刪除文本框,如果新增的文本框在最后面,也可以不做任何處理
// 刷新方法寫這里,將保持之前的第一響應(yīng)的文本框
[_tableView rzContinueFirstResponderAndExecuteCode:^(UIViewResponderHelper *nextResponder) {
    // 將刷新界面的方法寫到這里,不用擔(dān)憂這里會有block循環(huán)引用的問題
    [_tableView reloadData];
}];
  • 如果界面刷新時(shí),文本框較復(fù)雜,有新增或刪除文本框,又需要精準(zhǔn)的定位還原到刷新前的第一響應(yīng)者身上,則可設(shè)置文本框的tagIdentity。 具體意思可參考DemoTableViewCell中文本框_textField的設(shè)置方法
// 初始化文本框時(shí)

- (void)setModelType:(ItemModelType )type {
    _textField.enabled = YES;
    switch (type) {
    case ItemModelTypeDefault: {
        _textField.tagIdentity = @"ItemModelTypeDefault";
        _textField.placeholder = @"默認(rèn)";
        break;
    }
    case ItemModelTypeName: {
        _textField.tagIdentity = @"ItemModelTypeName";
        _textField.placeholder = @"ItemModelTypeName";
        break;
    }
    case ItemModelTypeSex: {
        _textField.tagIdentity = @"ItemModelTypeSex";
        _textField.placeholder = @"ItemModelTypeSex";
        break;
    }
    case ItemModelTypeDefault1: {
        _textField.tagIdentity = @"ItemModelTypeDefault1";
        _textField.placeholder = @"ItemModelTypeDefault1";
        _textField.enabled = NO;
        break;
    }
    case ItemModelTypeDefault2: {
        _textField.tagIdentity = @"ItemModelTypeDefault2";
        _textField.placeholder = @"ItemModelTypeDefault2";
        break;
    }
    default:
        break;
    }
}

// 刷新方法寫這里,將保持之前的第一響應(yīng)的文本框
[_tableView rzContinueFirstResponderAndExecuteCode:^(UIViewResponderHelper *nextResponder) {
    // 將刷新界面的方法寫到這里,不用擔(dān)憂這里會有block循環(huán)引用的問題
    [_tableView reloadData];
}];
  • 如果刷新之后,需要將第一響應(yīng)的光標(biāo)放到其他指定的文本框中,可以在刷新方法中設(shè)置
// 刷新方法寫這里,將尋找指定的下一個(gè)文本框
[_tableView rzContinueFirstResponderAndExecuteCode:^(UIViewResponderHelper *nextResponder) {
    // 將刷新界面的方法寫到這里,不用擔(dān)憂這里會有block循環(huán)引用的問題
    [_tableView reloadData];
    // 下邊兩個(gè)方法,二選一
    // 如果對應(yīng)nextFirstResponderIndex 或者 nextFirstResponderTagIdentity 找不到,則會找刷新前的那個(gè)繼續(xù)作為第一響應(yīng)
    // 如果刷新前的那個(gè)也找不到了,則會按照刷新前的那個(gè)的index繼續(xù)往下找,找不到的時(shí)候,以最后一個(gè)文本框作為第一響應(yīng)
    // nextResponder.nextFirstResponderIndex = 3; // 指定刷新后按從上到下(從左到右)依次序排到第n個(gè)為第一響應(yīng)
    nextResponder.nextFirstResponderTagIdentity = @"ItemModelTypeDefault2"; // 指定刷新后此id為第一響應(yīng)
}];

如果確定是scrollview 如tableivew或者collectionview刷新,則最好直接使用[tableview rzContinueFirstResponderAndExecuteCode]來刷新,這樣獲取界面的可響應(yīng)者時(shí),效率速度更高

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,828評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,525評論 19 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,102評論 4 61
  • 知道“正面管教”這四個(gè)字很久,但一直從未進(jìn)入課堂正式學(xué)習(xí)。通過一位愛學(xué)習(xí)的領(lǐng)導(dǎo)介紹,很榮幸走進(jìn)武漢圈媽課...
    小黎寫寫閱讀 424評論 0 1
  • 你看,有個(gè)女孩喜歡你 1、 綠草如茵的足球場上,學(xué)校里的兩支球隊(duì)在進(jìn)行著比賽,雖然夏日的太陽有點(diǎn)大的有點(diǎn)嚇人,但是...
    大房子613閱讀 373評論 2 11

友情鏈接更多精彩內(nèi)容