0

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

这是我的代码。你能帮我找出其中的问题吗?

自定义名称单元格.h

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

自定义视图控制器.h

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

自定义视图控制器.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 @""

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

谢谢您的帮助 ;)

4

3 回答 3

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;
于 2012-12-06T10:06:42.357 回答
0

您不应该[_tableview dequeueReusableCellWithIdentifier:CellIdentifier];在您的内部调用 -(IBAction)search:(id)sender因为它是一种在创建 tableView 期间重用单元格的机制。当您滚动表格视图时,您不是在创建新单元格,而是在重用您之前创建的一些单元格。

底线:改用cellForRowAtIndexPath来访问您部分中特定行的单元格,如果您想要第一部分的第一个单元格,它将是:

CustomNameCell * cell = (CustomNameCell *)[tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
于 2012-12-06T10:12:58.297 回答
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);
    }

}
于 2016-09-07T09:33:28.030 回答