在Cell中使用UITextField的UITableViewCell

时间:2013-04-11 15:00:28

标签: ios xcode uitableview

我正在从iOS的原生联系人应用中创建类似于“新联系人”的表单。

我找到的唯一方法是创建表视图并创建自定义表视图单元格。

到目前为止一直很好......

现在,我的TextField只有在点击它时才会获得焦点,但是当我点击我创建的Table View Cell类的任何地方时,我想将焦点设置为TextField。

我试过了:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];
    [self.txtInputer becomeFirstResponder];
    // Configure the view for the selected state
}

但它没有按照我的意愿工作,重点是表格的最后一个字段。

1 个答案:

答案 0 :(得分:3)

使用UITextField作为类的.h(我称之为textField)中的属性创建一个自定义单元格。 (我称之为TextFieldCell)

然后在didSelectRowAtIndexPath中有下面的代码。当点击一个单元格时,您将获得对TextFieldCells的引用,然后您可以从中查找textField属性并在其上调用becomeFirstResponder。注意我已经包含了您应该用于此示例的枚举。如果您不知道这些是什么,请将它们放在#includes下面并谷歌进入它们。喜欢这个词汇!!

//table view sections
enum
{
    TableViewSectionUsername = 0,
    TableViewSectionPassword,
        TableViewSectionLogin,
    TableViewSectionCount
};

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    TextFieldCell *usernameCell = (TextFieldCell*)[_tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:TableViewSectionUsername]];
    TextFieldCell *passwordCell = (TextFieldCell*)[_tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:TableViewSectionPassword]];

    //switch section
    switch(indexPath.section)
    {
        case TableViewSectionUsername:
        {
            [[usernameCell textField] becomeFirstResponder];
            break;
        }

        case TableViewSectionPassword:
        {
            [[passwordCell textField] becomeFirstResponder];
            break;
        }

        case TableViewSectionLogin:
        {
            if([[[usernameCell textField] text] isEqualToString:@""])
            {
                NSLog(@"Please enter a username");
                [[usernameCell textField] becomeFirstResponder];
                return;
            }

            if([[[passwordCell textField] text] isEqualToString:@""])
            {
                NSLog(@"Please enter a username");
                [[passwordCell textField] becomeFirstResponder];
                return;
            }

            [self dismissViewControllerAnimated:YES completion:nil];
            break;
        }

        default:
        {
        break;
        }
    }

    //deselect table cell
    [_tableView deselectRowAtIndexPath:indexPath animated:YES];

}