在ios中,光标的焦点未移动到下一个UITextView

在ios中,光标的焦点未移动到下一个UITextView,ios,ipad,focus,resignfirstresponder,becomefirstresponder,Ios,Ipad,Focus,Resignfirstresponder,Becomefirstresponder,这是我关于ios的第一个问题 我在视图中使用了两个UITextView对象(textView1和textView2),每个对象都有一些字符限制,具体情况如下: 最初,用户只能输入textView1 当输入的textView1字符限制超过时,光标将自动移到textView2 构建项目后,如果用户点击textView2并尝试写入,则光标必须移动到textView1(因为它是空的) 我写了代码,除了第三个场景外,一切都正常,用户只能进入textView1,但重点仍然是textView2 复制步骤:

这是我关于ios的第一个问题

我在
视图
中使用了两个
UITextView
对象(textView1和textView2),每个对象都有一些字符限制,具体情况如下:

  • 最初,用户只能输入textView1
  • 当输入的textView1字符限制超过时,光标将自动移到textView2
  • 构建项目后,如果用户点击textView2并尝试写入,则光标必须移动到textView1(因为它是空的)
我写了代码,除了第三个场景外,一切都正常,用户只能进入
textView1
,但重点仍然是
textView2

复制步骤:

  • 建设项目
  • 用户首先点击文本视图2,然后尝试编写一些内容
  • 根据编写的代码,焦点保留在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];
    }   
}}
-(void)viewDidLoad
{            
[超级视图下载];
[self.textView1成为第一响应者];
}
-(无效)textViewDidChange:(UITextView*)textView{
nInteger限制的文本长度1=110;
nInteger限制的文本长度2=130;
NSString*temp=textView.text;
if(textView==self.textView1){
如果([[textView text]长度]>restrictedLengthForTextView1){
text=[temp substringToIndex:[temp length]-1];
[textView辞职第一响应者];
[self.textView2成为第一响应者];
}
}否则{
if([[textView text]长度]>restrictedLengthForTextView2){
text=[temp substringToIndex:[temp length]-1];
[self.textView2辞职第一响应者];
}
}}
-void()textViewDidBeginEditing:(UITextView*)textView{
nInteger限制的文本长度1=110;
NSLog(@“dalknwdlakwd”);
if([[self.textView1 text]长度]

请在此帮助我。

这是一个已知的错误,在同一个runloop中辞职并成为第一响应者。试试下面的方法

[textView2 resignFirstResponder];

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

请按照以下步骤操作:

在.h文件中

@interface ViewController : UIViewController<UITextViewDelegate>
{
    IBOutlet UITextView *txtView1;
    IBOutlet UITextView *txtView2;
}
@end
实现如下所示的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个字符为例。
我希望这能对你有所帮助。

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

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

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

那么这里的解决方案是什么?请标出一个被接受的答案。
[textView1 performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];