gpt4 book ai didi

iphone - 使用 uitextfields 创建 uitableview 表单

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:12:47 24 4
gpt4 key购买 nike

我正在处理一个有 uitableview 的地方,我想在它的每个单元格中添加一个 uitextfield,以便它可以用作表单。大约有 15 个这样的 uitextfields。但是由于屏幕上的空间很小,一次只显示 5 行,而其他行则出现在滚动中。

当我尝试从所有这些 uitextfields 中获取数据时,我只为那些可见的数据获取数据,而对于其他人,我得到 null。它应该是因为我没有使用重用标识符。

以下是我的 CellfoRrowAtIndex 代码:

editContactCell *tcell = (editContactCell*) [tableView dequeueReusableCellWithIdentifier:nil];
NSArray *nib= [[NSBundle mainBundle] loadNibNamed:@"editContactCell" owner:self options:nil];
tcell = (editContactCell *)[nib objectAtIndex:0];
tcell.accessoryType = UITableViewCellAccessoryNone;
tcell.selectionStyle = UITableViewCellSelectionStyleNone;

tcell.txtDetails.tag = indexPath.row+50;
if([dictClientDetails count]>0){
if(indexPath.section==0 && indexPath.row==0){
tcell.lblTitle.text = @"Mobile:";
tcell.txtDetails.placeholder = @"Mobile:";
if([dictClientDetails count]>0){
tcell.txtDetails.text = [dictClientDetails objectForKey:@"Mobile"];
}
}
else if(indexPath.section==0 && indexPath.row==1){
tcell.lblTitle.text = @"Work:";
tcell.txtDetails.placeholder = @"Work:";
if([dictClientDetails count]>0){
tcell.txtDetails.text = [dictClientDetails objectForKey:@"Work_number"];
}
}
else if(indexPath.section==1 && indexPath.row==0){
tcell.lblTitle.text = @"Email:";
tcell.txtDetails.placeholder = @"Email:";
if([dictClientDetails count]>0){
tcell.txtDetails.text = [dictClientDetails objectForKey:@"Email"];
}
}
else if(indexPath.section==2 && indexPath.row==0){
tcell.lblTitle.text = @"IM1:";
tcell.txtDetails.placeholder = @"IM1:";
if([dictClientDetails count]>0){
tcell.txtDetails.text = [dictClientDetails objectForKey:@"IM1"];
}
}
else if(indexPath.section==2 && indexPath.row==1){
tcell.lblTitle.text = @"IM2:";
tcell.txtDetails.placeholder = @"IM2:";
if([dictClientDetails count]>0){
tcell.txtDetails.text = [dictClientDetails objectForKey:@"IM2"];
}
}
else if(indexPath.section==3 && indexPath.row==0){
tcell.lblTitle.text = @"Based In:";
tcell.txtDetails.placeholder = @"Based In:";
if([dictClientDetails count]>0){
tcell.txtDetails.text = [dictClientDetails objectForKey:@"Location"];
}
}
else if(indexPath.section==3 && indexPath.row==1){
tcell.lblTitle.text = @"Address:";
tcell.txtDetails.placeholder = @"Address:";
if([dictClientDetails count]>0){
tcell.txtDetails.text = [dictClientDetails objectForKey:@"Address"];
}
}
else if(indexPath.section==4 && indexPath.row==0){
tcell.lblTitle.text = @"Division:";
tcell.txtDetails.placeholder = @"Division:";
if([dictClientDetails count]>0){
tcell.txtDetails.text = [dictClientDetails objectForKey:@"Division"];
}
}
else if(indexPath.section==4 && indexPath.row==1){
tcell.lblTitle.text = @"Department:";
tcell.txtDetails.placeholder = @"Department:";
if([dictClientDetails count]>0){
tcell.txtDetails.text = [dictClientDetails objectForKey:@"Department"];
}
}
}
return tcell;

我正在尝试获取如下数据:

NSLog(@"1 %@",((editContactCell*)[tblvwEditContactDetails cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]).txtDetails.text);
NSLog(@"2 %@",((editContactCell*)[tblvwEditContactDetails cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]]).txtDetails.text);
NSLog(@"3 %@",((editContactCell*)[tblvwEditContactDetails cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]]).txtDetails.text);
NSLog(@"4 %@",((editContactCell*)[tblvwEditContactDetails cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:2]]).txtDetails.text);
NSLog(@"5 %@",((editContactCell*)[tblvwEditContactDetails cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:2]]).txtDetails.text);
NSLog(@"6 %@",((editContactCell*)[tblvwEditContactDetails cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:3]]).txtDetails.text);
NSLog(@"7 %@",((editContactCell*)[tblvwEditContactDetails cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:3]]).txtDetails.text);
NSLog(@"8 %@",((editContactCell*)[tblvwEditContactDetails cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:4]]).txtDetails.text);
NSLog(@"9 %@",((editContactCell*)[tblvwEditContactDetails cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:4]]).txtDetails.text);

但是只有可见的行有任何文本字段,其他行返回 null。

最佳答案

您可以在您的自定义单元格中实现一个协议(protocol)并将每个更改传递给您的表格 View 并手动处理:

// Cell.h
@protocol UpdateValueProtocol <NSObject>

-(void)updateValue:(id)value forKey:(NSString *)key;

@end

@interface Cell : UITableViewCell <UITextFieldDelegate>
...

@property (nonatomic, assign) UITableViewController<UpdateValueProtocol> *parent;
@end

// Cell.m
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[parent updateValue:textField.text forKey:lblTitle.text];
return YES;
}

// ParentTableView.h
@interface ParentTableView<UpdateValueProtocol>
{
NSMutableDictionary *contactDictionary;
}

// ParentTableView.m
-(void)updateValue:(id)value forKey:(NSString *)key
{
if(!contactDictionary)
contactDictionary = [NSMutableDictionary dictionary];
[contactDictionary setObject:value forKey:key];
}

不知道您的 dictClientDetails 是做什么用的,但您也可以使用它代替 contactDictionary 来更新值。

关于iphone - 使用 uitextfields 创建 uitableview 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17647941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com