Ios 如何从自定义UITableView中的UITextField读取数据

Ios 如何从自定义UITableView中的UITextField读取数据,ios,uitableview,nsstring,uitextfield,Ios,Uitableview,Nsstring,Uitextfield,首先,我知道还有好几个标题看起来是一样的。我已经检查过了,但我问的是一个具体问题 我想做什么:创建了包含电子邮件和密码的登录表。UITableView中的UITextfields。只是想将这些数据放入一些NSString变量指针中,以便进一步处理 我有一个名为CustomCell的自定义单元格类,如下所示: #import "CustomCell.h" #import "QuartzCore/QuartzCore.h" @implementation CustomCell @synthesiz

首先,我知道还有好几个标题看起来是一样的。我已经检查过了,但我问的是一个具体问题

我想做什么:创建了包含电子邮件和密码的登录表。UITableView中的UITextfields。只是想将这些数据放入一些NSString变量指针中,以便进一步处理

我有一个名为CustomCell的自定义单元格类,如下所示:

#import "CustomCell.h"
#import "QuartzCore/QuartzCore.h"

@implementation CustomCell
@synthesize textfield;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        textfield = [[UITextField alloc] initWithFrame:CGRectMake(5, 7, 160, 20)];
        textfield.textColor = [UIColor blackColor];
        textfield.font = [UIFont systemFontOfSize:14];
        [self.contentView addSubview:textfield];
    }
    return self;
}

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

- (void)dealloc {
    [super dealloc];
}
@end
我有ViewController,在这里我使用下面的自定义表,你可以看到我的tableView CellForRowatinex方法

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"Cell";
    [tableView.layer setCornerRadius:10.0];

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];}

        switch (indexPath.row) {
            case 0:
                cell.textfield.placeholder = @"Email";
                break;
            case 1:
                cell.textfield.placeholder = @"Password";
                cell.textfield.tag = 0;
                break;
    }

    return cell;
}
最后,在下面的同一节课上,我试图阅读电子邮件和密码

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:0];
CustomCell *cell = [tableView cellForRowAtIndexPath:indexPath]; // ERROR!!!
NSString *userpassword = cell.textfield.text;
错误:未知接收器类型表视图:

注意同一行:
找不到ClassMethod+cellforrowatindexpath返回类型默认为id


您看到我做错了什么吗?

您的ViewController继承的是UIView还是UITableViewController?这是假设您在与表视图相同的控制器上调用tableView。

您的ViewController是继承UIView还是UITableViewController?这是假设您在与表视图相同的控制器上调用tableView。

您不能在数据源和委托方法之外使用tableView。在接口定义中,tableview的名称是什么?使用该方法。

您不能在数据源和委托方法之外使用tableView。在接口定义中,tableview的名称是什么?使用该方法。

请忽略tableView CellForRawatineXpath方法中的标记。为什么要忽略该标记?在这里使用tag实际上不是一个坏主意。标记您的电子邮件文本字段1和密码文本字段2。使视图控制器成为这两个文本字段的代理,并实现
-(BOOL)textField shouldReturn:(UITextField*)textField
。在此方法中,读取标记以区分哪个文本字段结束了编辑。获取值并将其保存在控制器ivar中。我不是在回答这个问题,因为我认为你的问题的真正答案应该是,如果你不需要显示表格数据,就不要使用表格视图。请忽略tableView CellForRawatineXpath方法中的标记。为什么要忽略标记?在这里使用tag实际上不是一个坏主意。标记您的电子邮件文本字段1和密码文本字段2。使视图控制器成为这两个文本字段的代理,并实现
-(BOOL)textField shouldReturn:(UITextField*)textField
。在此方法中,读取标记以区分哪个文本字段结束了编辑。获取值并将其保存在控制器ivar中。我不是在这里输入答案,因为我认为你的问题的真正答案应该是,如果你不需要显示表格数据,就不要使用表格视图。
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:0];
CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath]; // Add This instead
NSString *userpassword = cell.textfield.text;