2013-08-07 46 views
1

这是我在ios焦点光标不转移到下一个的UITextView在IOS

第一个问题,我在View使用两个UITextView对象(textView1和textView2),他们每个人都有一些以下一些字符的限制场景:

  • 最初用户只能进入textView1。
  • 当输入的textView1的字符限制结束时,光标将自动切换到textView2。
  • 构建项目后,如果用户点击textView2并尝试写入,则光标必须移至textView1(因为它为空)。

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

重现步骤:

  • 生成项目
  • 用户先点击textView2,然后尝试写东西。
  • 根据编写的代码,焦点保持在textView2但用户正在编写成textView1(参见附件)

这里是快照:

enter image description here

这里是编写的代码:

- (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]; 
    } 
}} 

请帮我这里..

+0

那么这里有什么解决方案?请标记一个被接受的答案。 – fatuhoku

回答

1

这是一个已知的bug,在同一个runloop内辞职并成为第一响应者。请尝试以下

[textView2 resignFirstResponder]; 

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

请不要按以下操作:在.m文件

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

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

在.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; 
} 

我以第一个文本视图中的文本长度限制为24个字符为例。 我希望这会帮助你。

1

Annadurai的答案更新:它仍然是2016年的错误!想别人的建议后,取消周围的tableview细胞,和/或改变色调的颜色只有这个答案为我工作:

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

FYI我的情况是,我要辞职一个TextView,重装表,并返回到相同的textView。在此修复之前 - 在重新加载的textView上没有光标(是的,我可以键入并看到字符。)在performSelector ... afterDelay之后 - 光标再次可见。