我有以下代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (indexPath.row == 0)
cell.tag = 0;
else {
cell.tag = 1;
}
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UILabel *startDtLbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 80, 25)];
if (indexPath.row == 0)
startDtLbl.text = @"Username";
else {
startDtLbl.text = @"Password";
}
startDtLbl.backgroundColor = [UIColor clearColor];
[cell.contentView addSubview:startDtLbl];
UITextField *passwordTF = [[UITextField alloc] initWithFrame:CGRectMake(100, 5, 200, 35)];
passwordTF.delegate = self;
if (indexPath.row == 0)
passwordTF.tag = 2;
else {
passwordTF.tag = 3;
}
[cell.contentView addSubview:passwordTF];
}
return cell;
}
我想获得UITextField,我该怎么做?我尝试过以下操作但失败了:
UITableViewCell * username_cell = (UITableViewCell*)[self.view viewWithTag:0];
UITableViewCell * password_cell = (UITableViewCell*)[self.view viewWithTag:1];
UITextField * username = (UITextField*)[username_cell.contentView viewWithTag:2];
UITextField * password = (UITextField*)[password_cell.contentView viewWithTag:3];
NSLog(@"Username is %@", [username text]);
NSLog(@"Password is %@", [password text]);
答案 0 :(得分:6)
你应该停止使用标签来获取细胞。您应该使用indexPaths。
替换
UITableViewCell * username_cell = (UITableViewCell*)[self.view viewWithTag:0];
UITableViewCell * password_cell = (UITableViewCell*)[self.view viewWithTag:1];
带
NSIndexPath *indexPathUserName = [NSIndexPath indexPathForRow:0 inSection:0];
UITableViewCell * username_cell = [self.tableView cellForRowAtIndexPath:indexPathUserName];
NSIndexPath *indexPathPassword = [NSIndexPath indexPathForRow:1 inSection:0];
UITableViewCell * password_cell = [self.tableView cellForRowAtIndexPath:indexPathPassword];
当您想要引用特定视图时,您不能使用标记0.因为所有没有自定义标记的标记都具有0的标记。因此,如果您使用viewWithTag:0,则会获得最后添加的视图。而且通常这不是你想要的观点。
答案 1 :(得分:2)
如果您的文本字段位于uiscrollview内并动态递增
int i=0;
for (UIView *subview in ContentScroll.subviews) {
UITextField *textField = (UITextField*)[ subview viewWithTag:i];
NSLog(@"%@",textField.text);
NSString *fieldValue = textField.text;
if ([fieldValue isEqual:[NSNull null]]) {
NSLog(@"as");
}else{
NSLog(@"Field %d has value: %@", i, fieldValue);
}
i++;
}
答案 2 :(得分:1)
我在这里回答了你的问题login using UITableView
答案 3 :(得分:1)
该表似乎只显示用户名和密码,因此我建议保留两个指向创建的文本字段的指针。这将消除对标签的需要。可以消除用于标记单元格的代码,并且可以更新标记文本字段的代码以将指针存储在视图的控制器中。
UITextField *passwordTF = [[UITextField alloc] initWithFrame:CGRectMake(100, 5, 200, 35)];
passwordTF.delegate = self;
if (indexPath.row == 0)
self.passwordTextField = passwordTF;
else {
self.usernameTextField = passwordTF;
}
[cell.contentView addSubview:passwordTF];
答案 4 :(得分:-1)
我认为问题出现在这段代码的第一层:
而不是:
UITableViewCell * username_cell = (UITableViewCell*)[self.view viewWithTag:0];
UITableViewCell * password_cell = (UITableViewCell*)[self.view viewWithTag:1];
使用此:
UITableViewCell * username_cell = (UITableViewCell*)[self.tableView viewWithTag:0];
UITableViewCell * password_cell = (UITableViewCell*)[self.tableView viewWithTag:1];
或者您的tableview的名称。您正试图从self.view
获取UITableViewCells,但UITableViewCells是tableview的子视图。
<强>替代强>
如果这不起作用,那么您可以使用
找到UITablViewCellsNSArray *arrTableViewCells = [tableView subviews];
然后从这些单元格中获取UITextField。
应该有效