0

我正在尝试通过使用分组静态表视图在 iPhone 应用程序上实现输入表单。

didSelectRowAtIndexPath用来懒惰地创建一个文本字段并添加到相关的单元格中。

截屏

我的问题是它becomeFirstResponder的行为不像我预期的那样。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section == 0)
{
    if(!self.contactNameTextField)
    {
        self.contactNameTextField = [[UITextField alloc] initWithFrame:CGRectMake(93, 14, 200, 20)];
        self.contactNameTextField.backgroundColor = [UIColor clearColor];
        self.contactNameTextField.font = [UIFont boldSystemFontOfSize:15];
        self.contactNameTextField.keyboardType = UIKeyboardTypeEmailAddress;
        [self.contactNameCell addSubview:self.contactNameTextField];
    }

    [self.contactNameTextField becomeFirstResponder];

}

if(indexPath.section == 1)
{
    if(!self.contactEmailTextField)
    {
        self.contactEmailTextField = [[UITextField alloc] initWithFrame:CGRectMake(93, 14, 200, 20)];
        self.contactEmailTextField.backgroundColor = [UIColor clearColor];
        self.contactEmailTextField.font = [UIFont boldSystemFontOfSize:15];
        self.contactEmailTextField.keyboardType = UIKeyboardTypeEmailAddress;
        [self.contactEmailCell addSubview:self.contactNameTextField];
    }

    [self.contactEmailTextField becomeFirstResponder];

}

代码按预期逐步执行。

如果我先点击第 0 部分,名称文本字段将成为第一响应者。如果我然后点击第 1 部分,电子邮件文本字段将成为第一响应者。如果我然后点击第 0 部分,即使becomeFirstResponder在名称文本字段上调用它,它也没有响应。

此外,如果我先点击第 1 部分,即使becomeFirstResponder在电子邮件文本字段中调用它,它也不会响应。

请指教

4

2 回答 2

0

问题解决了,self.contactNameTextField 出现了两次愚蠢的剪切和粘贴错误。

于 2012-11-20T11:43:40.153 回答
0

在调用 becomeFirstResponder 之前尝试调用其他文本字段的 resignFirstResponder。代替

[self.contactNameTextField becomeFirstResponder];

[self.contactEmailTextField resignFirstResponder];
[self.contactNameTextField becomeFirstResponder];

对第 1 部分执行相同操作。在调用 resignFirstResponder 之前检查 textField 是否不为零。

于 2012-11-19T12:41:29.063 回答