iOS UItextView监听输入特定字符跳转页面选择选项返回

今天有朋友问我一个需求的实现,于是自己写了一个Demo简单的实现了一下:

需求是:

1>比如: 检测用户输入"A"字符串,跳转页面选择选项,将选择的选项放置textView里,作为当前的输入;

2>不是"A"字符,则正常的textView输入;

3.用户跳转选择了,则将选择的输入到textView,否则,还是输入用户输入的字符即可.

实现代码如下:

//
//  ViewController.m
//  Demo
//
//  Created by 思 彭 on 2017/4/30.
//  Copyright ? 2017年 思 彭. All rights reserved.
//

#import "ViewController.h"
#import "ViewController1.h"

@interface ViewController ()<UITextViewDelegate>

@property (nonatomic, strong) UITextView *textView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.textView = [[UITextView alloc]initWithFrame:CGRectMake(20, 100, self.view.frame.size.width - 40, 200)];
    self.textView.delegate = self;
    self.textView.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:self.textView];
}

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {

    return YES;
}

- (BOOL)textViewShouldEndEditing:(UITextView *)textView {

    return YES;
}

- (void)textViewDidBeginEditing:(UITextView *)textView {

}
- (void)textViewDidEndEditing:(UITextView *)textView {

}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {

    NSLog(@"%@",text);
    __block BOOL isChangeFlag;

    if ([text isEqualToString:@"A"]) {
        // 跳转页面
        ViewController1 *vc1 = [ViewController1 new];
        vc1.block = ^(NSString *str) {
            NSLog(@"str = %@",str);
            NSString *textViewText = textView.text;
            NSString *s = [textViewText substringWithRange:NSMakeRange(0, textViewText.length)];
            if (str.length > 0) {
                isChangeFlag = YES;
                textView.text = [NSString stringWithFormat:@"%@%@",s, str];
            } else {
                isChangeFlag = NO;
                textView.text = [NSString stringWithFormat:@"%@%@",s, text];
            }
        };
        [self.navigationController pushViewController: vc1 animated:YES];
        return isChangeFlag;
    }
    return YES;
}

- (void)textViewDidChange:(UITextView *)textView {

}

- (void)textViewDidChangeSelection:(UITextView *)textView {

}

@end

跳转页面选择:

//
//  ViewController1.m
//  Demo
//
//  Created by 思 彭 on 2017/4/30.
//  Copyright ? 2017年 思 彭. All rights reserved.
//

#import "ViewController1.h"

@interface ViewController1 ()<UITableViewDelegate, UITableViewDataSource>

@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, copy) NSString *selectedStr;

@end

@implementation ViewController1

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor whiteColor];
    self.selectedStr = @"";
    [self setUI];
}

#pragma mark - 设置界面

- (void)setUI {

    self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStyleGrouped];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.tableView.backgroundColor = [UIColor clearColor];
    self.tableView.tableFooterView = [[UIView alloc]init];
    // 注册cell
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
    [self.view addSubview: self.tableView];
}

#pragma mark - UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return 10;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
    cell.textLabel.text = [NSString stringWithFormat:@"%ld",indexPath.row];
    cell.textLabel.font = [UIFont systemFontOfSize:15];
    return cell;
}

#pragma mark - UITableViewDelegate

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {

    return 0.001f;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {

    return 0.0001f;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *str = [tableView cellForRowAtIndexPath:indexPath].textLabel.text;
    self.selectedStr = str;
    if (self.block) {
        self.block(self.selectedStr);
    }
    [self.navigationController popViewControllerAnimated:YES];
}

@end

总结:

其实主要的实现就在textView的代理的实现:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 }
span.s1 { }
span.s2 { color: #ba2da2 }
span.s3 { color: #703daa }

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;

时间: 2024-08-02 19:16:56

iOS UItextView监听输入特定字符跳转页面选择选项返回的相关文章

在EditText中限制输入,自定义样式,监听输入的字符,自动换行

自动获取焦点 <!-- 添加:<requestFocus /> 会自动获取焦点 --> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:gravity="center_horizontal" android:hint="自

js 监听后退事件及跳转页面

//直接跳转 window.location.href="b.html"; //返回上一级页面 window.history.back(-1); //返回下一级页面 window.history.go(-1); jq监听后退事件 <script type="text/javascript"> $(document).ready(function(e) { var counter = 0; if (window.history && win

EditTextUtil 监听输入字数

package com.toge.ta.utils; import android.text.Editable;import android.text.Selection;import android.text.TextWatcher;import android.widget.EditText; /** * Created by Administrator on 2015/10/21. */public class EditTextUtil { /* * 监听输入内容是否超出最大长度,并设置光

移动端监听输入手机号以及判断手机号有效

项目案例需求如,输入/绑定正确的手机号才能下载软件,输入手机号发送验证码的功能等: 如下代码可以实现基本功能: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <style> .gray-btn{ background: #ccc; } .blue-btn{ background: #09f; } </style> &

Android EditText截获与监听输入事件

Android EditText截获与监听输入事件共有2种方法: 1.第一种方法:使用setOnKeyListener(),不过这种方式只能监听硬键盘事件. edittext.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { textview.setText(edittext.getText()); return fal

Cocos2dx 3.2键盘监听的打开方式以及点击两次返回退出的实现方法

Cocos2dx 3.2键盘监听的打开方式以及点击两次返回退出的实现方法 首先,在Scene中重载下面两个函数 [cpp] view plaincopy virtual void onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event); virtual void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event); 第一个函数在按下时触发,第二个函数在松开是触发. 然

EditText监听输入

来源:http://blog.csdn.net/com360/article/details/6616693 .使用TextWatcher类,这种方式是可以监听软键盘和硬键盘的,我们只需要实现onTextChanged方法即可,另外TextWatcher还提供了beforeTextChanged和afterTextChanged方法,用于更加详细的输入监听处理 java代码 edittext.addTextChangedListener(new TextWatcher() { @Override

input, textarea,监听输入事件

IE使用'propertychange'事件监听,其它浏览器使用'input'事件测试了IE7-10, Chrome, FF, 输入没有问题.♥但在IE9下,  删除,  回退,  Ctrl+X 没有监听到! var $input = $('#textinput'); var $span = $('#num'); var customLength = 40; var pressHandle = function(){ var txtLen = $input.val().length; if (t

ios 定位 监听是否跨入某个指定的区域

/*****监听用户是否进入和走出 在某个区域*****/ 1 #import "ViewController.h" 2 #import <CoreLocation/CoreLocation.h> 3 4 5 @interface ViewController ()<CLLocationManagerDelegate> 6 7 /** */ 8 @property (nonatomic, strong) CLLocationManager *locationM;