1

这是我的第一个问题ios

我在UITextViewa 中使用了两个对象(textView1 和 textView2)View,每个对象都有一些字符限制,并带有以下一些场景:

  • 最初用户只能进入 textView1。
  • 当 textView1 输入的字符数超过时,光标会自动移动到 textView2。
  • 构建项目后,如果用户点击 textView2 并尝试写入,Cursor 必须转移到 textView1(因为它是空的)。

我写了代码,除了第三种情况外一切正常,用户只能进入textView1但焦点仍然在textView2

重现步骤:

  • 构建项目
  • 用户首先点击 textView2 并尝试写一些东西。
  • 根据编写的代码,焦点保留在 textView2 中,但用户正在写入 textView1(见附件)

这是快照:

在此处输入图像描述

这是写好的代码:

- (void)viewDidLoad
{            
[super viewDidLoad];
[self.textView1 becomeFirstResponder];
}

- (void)textViewDidChange:(UITextView *)textView{
NSInteger restrictedLengthForTextView1 = 110;
NSInteger restrictedLengthForTextView2 = 130;
NSString *temp=textView.text;
if(textView == self.textView1){
    if([[textView text] length] > restrictedLengthForTextView1){
        textView.text=[temp substringToIndex:[temp length]-1];
        [textView resignFirstResponder];
        [self.textView2 becomeFirstResponder];
    }
}else{
    if([[textView text] length] > restrictedLengthForTextView2){
        textView.text=[temp substringToIndex:[temp length]-1];
        [self.textView2 resignFirstResponder];
    }

}}

- void()textViewDidBeginEditing:(UITextView *)textView{
NSInteger restrictedLengthForTextView1 = 110;

NSLog(@"dalknwdlakwd");
if([[self.textView1 text] length] < restrictedLengthForTextView1){
    if(textView == self.textView2){
        [self.textView2 resignFirstResponder];
        [self.textView1 becomeFirstResponder];
    }   
}}

请在这里帮我..

4

3 回答 3

1

这是一个已知的错误,在同一个运行循环中辞职并成为第一响应者。尝试以下

[textView2 resignFirstResponder];

[textView1 performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
于 2013-08-07T11:24:52.860 回答
1

请按照以下方式进行:

在 .h 文件中

@interface ViewController : UIViewController<UITextViewDelegate>
{
    IBOutlet UITextView *txtView1;
    IBOutlet UITextView *txtView2;
}
@end

在 .m 文件中

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [txtView1 becomeFirstResponder];
    txtView2.editable=NO;
}

实现 textView 委托方法,如下所示:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if(textView.tag==1)
    {
        if([textView.text length]>25)
        {
            txtView2.editable=YES;
            [txtView2 becomeFirstResponder];
        }
    }
    return YES;
}

我以第一个 textview 中的文本长度限制为 24 个字符为例。我希望这能帮到您。

于 2013-08-07T11:28:34.890 回答
1

Annadurai 答案的更新:2016 年仍然是一个错误!在尝试了其他人的建议以取消选择周围的 tableview 单元格和/或更改色调后,只有这个答案对我有用:

[textView1 performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];

仅供参考我的情况是我正在退出一个 textView,重新加载表格,然后返回到同一个 textView。在此修复之前 - 重新加载的 textView 上没有光标(是的,我可以输入并查看字符。)在 performSelector... afterDelay 之后 - 光标再次可见。

于 2016-09-06T21:00:33.567 回答