从动态单元格中的文本字段获取数据时出现问题

时间:2012-12-06 09:40:54

标签: objective-c ios xcode uitableview

我创建了一个动态表,但是当我尝试访问第一个单元格中文本字段的内容时,我遇到了一个问题。我得到的文本字段总是空的,即使我在调用操作之前输入了一些文本。

这是我的代码。你能帮我找一下它的错误吗?

CustomNameCell.h

@interface CustomNameCell : UITableViewCell
    @property (retain, nonatomic) IBOutlet UITextField *nameTextField;
@end

CustomViewController.h

@interface CustomViewController : UITableViewController
    @property (retain, nonatomic) IBOutlet UITableView *tableview;
    - (IBAction)search:(id)sender;
@end

CustomViewController.m:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 1) {
        static NSString *CellIdentifier = @"nameCell";
        CustomNameCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell==nil) {
            cell = [[CustomNameCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        return cell;
    }
    ...

以及单击按钮时的操作,我尝试获取文本字段的内容:

- (IBAction)search:(id)sender {

static NSString *CellIdentifier = @"nameCell";
CustomNameCell *nameCell = [_tableview dequeueReusableCellWithIdentifier:CellIdentifier];

here nameCell.nameTextField.text is always equal to @""

为什么我的文字字段总是空的?

感谢您的帮助;)

3 个答案:

答案 0 :(得分:2)

如果你需要一个单元格,你应该这样:

CustomNameCell * cell = (CustomNameCell *)[tableview cellForRowAtIndexPath:indexPath];
NSString * textInField = cell.nameTextField.text;

如果你告诉我你需要什么逻辑我会扩展我的问题。现在 - 您可以使用此方法。

第一个单元格的内容将是:

CustomNameCell * cell = (CustomNameCell *)[tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
NSString * textInField = cell.nameTextField.text;

答案 1 :(得分:0)

您不应在{ - 1}}中调用[_tableview dequeueReusableCellWithIdentifier:CellIdentifier];,因为它是在创建tableView期间重用单元格的机制。在滚动tableview时,不是创建新单元格,而是重新使用之前创建的一些单元格。

底线:使用(IBAction)search:(id)sender来访问您区域中特定行的单元格,如果您想要第一个区域的第一个单元格,那么它将是:

cellForRowAtIndexPath

答案 2 :(得分:0)

我就是这样做的。我不知道这是当前的方法。

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return cellContentArray.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellId=@"cell";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath];
    if (cell==nil) {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
    }
    UITextField *firsttext=[cell viewWithTag:101];
    UITextField *second=[cell viewWithTag:102];
    [second setTag:(indexPath.row)+1000];
    [firsttext setTag:(indexPath.row)+100];
    return cell;
}
- (IBAction)buttonPressed:(id)sender 
{
    for (int i=0; i<cellContentArray.count; i++) {
        UITableViewCell * cell = (UITableViewCell *)[baseTableveiew cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
        UITextField *tempTextField=[cell viewWithTag:i+100];
        UITextField *secondTextField=[cell  viewWithTag:i+1000];
        NSString * textInField = tempTextField.text;
        NSLog(@"tempTExtTiedl tag %ld data %@",(long)tempTextField.tag, textInField);
        NSLog(@"second tag %ld data %@",(long)secondTextField.tag, secondTextField.text);
    }

}