UITextField becomeFirstResponder 不显示文本光标

Posted

技术标签:

【中文标题】UITextField becomeFirstResponder 不显示文本光标【英文标题】:UITextField becomeFirstResponder not showing cursor for text 【发布时间】:2014-01-04 02:32:40 【问题描述】:

我在每个 UITableViewRow 上有两个 UITextField,由于某种原因,当我在 UIKeyboard 上按回车键时,两个 UITextField 都不会响应(光标不可见)。

我有一个正在使用的自定义 UITableViewCell,如果你愿意,我可以向你展示代码,但我认为这不是问题,因为返回键适用于 95% 的 UITableViewCell。所以我在想也许这就是我处理 UITextFields 的委托方法的方式?

这是我用于委托方法的代码。

-(BOOL)textFieldShouldBeginEditing:(UITextField*)textfield 

        int height = self.finishingTableView.frame.size.height;
         self.finishingTableView.frame= CGRectMake(self.finishingTableView.frame.origin.x, self.finishingTableView.frame.origin.y, self.finishingTableView.frame.size.width, 307);

    // select correct row
    if (textfield.tag > 999999) 
        int adjustTag = textfield.tag-1000000; // remove a million so that you have the text fields correct position in the table. (this is only for height textfields)
        NSIndexPath *indexPath =[NSIndexPath indexPathForRow:adjustTag inSection:0];
        [finishingTableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
        [self tableView:finishingTableView didSelectRowAtIndexPath:indexPath];
        [self.finishingTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:YES];
        return YES;
     else 
        NSIndexPath *indexPath =[NSIndexPath indexPathForRow:textfield.tag inSection:0];
        [finishingTableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
        [self tableView:finishingTableView didSelectRowAtIndexPath:indexPath];
        [self.finishingTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:YES];
        return YES;
    
    return YES;


- (BOOL)textFieldShouldReturn:(UITextField *)textField

    NSLog(@"%i", textField.tag+1);

    [[self.view viewWithTag:textField.tag+1] becomeFirstResponder];
    // this means there has been a change in the UItextfield


    NSLog(@"%@", selectedItemDictionary);
    if (textField.tag < 999999) 
        tempFinishingObjectDictionary = [selectedItemDictionary mutableCopy];
        if (![textField.text isEqualToString:[selectedItemDictionary objectForKey:@"mMM"]]) 
            tempUpdatedRow = @"T";
            // remove kevalues
            [tempFinishingObjectDictionary removeObjectForKey:@"updatedRow"];
            [tempFinishingObjectDictionary removeObjectForKey:@"new_mMM"];
            // update keyvalues
            [tempFinishingObjectDictionary setValue:tempUpdatedRow forKey:@"updatedRow"];
            [tempFinishingObjectDictionary setValue:textField.text forKey:@"new_mMM"];
        
     else 
        if (![textField.text isEqualToString:[selectedItemDictionary objectForKey:@"hMM"]]) 
            tempUpdatedRow = @"T";
            // remove kevalues
            [tempFinishingObjectDictionary removeObjectForKey:@"updatedRow"];
            [tempFinishingObjectDictionary removeObjectForKey:@"new_hMM"];
            // update keyvalues
            [tempFinishingObjectDictionary setValue:tempUpdatedRow forKey:@"updatedRow"];
            [tempFinishingObjectDictionary setValue:textField.text forKey:@"new_hMM"];
        
    
    NSLog(@"%@", tempFinishingObjectDictionary);
    [coreDataController editSelectedFinishing:htmlProjID UpdatedNSD:tempFinishingObjectDictionary SelectedRow:selectedItemIndexPathRow];
    [SVProgressHUD dismiss];


    NSLog(@"%@", selectedItemDictionary);

    return YES;

我不知道在哪里查看或如何找到此错误,因为它看起来很随机,但每次都发生在相同的 UITextFields 上。

上面的代码是我认为问题所在;但是,在记录了所有内容并调试了几个小时后,我开始认为这是 UITableViewCells 中的 UITextFields 的错误。

【问题讨论】:

【参考方案1】:

[[self.view viewWithTag:textField.tag+1] canBecomeFirstResponder] == YES

您还需要先退出当前的UITextField,然后再将下一个设置为第一响应者

[textField resignFirstResponder];

【讨论】:

我刚刚尝试在我设置 textfield.tag+1 的地方添加 resignFirstResponder 成为FirstResponder。它从视图中删除了 UIKeyboard,但仍然没有使 textfield.tag+1 成为FirstReasponder。 如果这是结果,您可以检查/记录吗? [[self.view viewWithTag:textField.tag+1] canBecomeFirstResponder] == YES 只是想弄清楚如何做到这一点,并会尽快让您知道...只是不确定如何登录 canbecomefirstreasponder 类似这样的 NSLog([[self.view viewWithTag:textField.tag+1] canBecomeFirstResponder] ? @"Yes" : @"No"); 是的,我知道如何登录。并且 UItextfield 返回 NO

以上是关于UITextField becomeFirstResponder 不显示文本光标的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITextField 子类中设置 UITextField 的属性

UITextField

在 UITextField 操作中将 UITextField 字符串转换为 Double

如何调整 UITextField 占位符文本以适合 UITextField 宽度?

如果添加了新的 UITextField,如何向下移动许多 UITextField

如果 UITextField 已经创建,不要在 Tap 上重新创建 UITextField