光标的焦点不会转移到ios中的下一个UITextView

时间:2013-08-07 09:45:39

标签: ios ipad focus resignfirstresponder becomefirstresponder

这是关于ios

的第一个问题

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

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

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

重现的步骤:

  • 构建项目
  • 用户首先点击textView2然后尝试写点东西。
  • 根据编写的代码,Focus保留在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];
    }   
}}

请帮帮我..

3 个答案:

答案 0 :(得分:1)

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

[textView2 resignFirstResponder];

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

答案 1 :(得分:1)

请按以下方式进行:

<。>文件中的

@interface ViewController : UIViewController<UITextViewDelegate>
{
    IBOutlet UITextView *txtView1;
    IBOutlet UITextView *txtView2;
}
@end
<。>文件中的

- (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个字符作为示例。 我希望这会对你有所帮助。

答案 2 :(得分:1)

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

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

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