在我的应用程序中,我动态创建一个包含2个控件的表格视图单元格,其中一个是UILabel
,用于显示我从Web服务接收的标题,另一个是UITextField
。此UITextField
将接受用户输入。
现在所有的字段名称和字段类型都是从Web服务接收的,所以我不知道每次都会出现哪个字段?
那么,当用户在字段中输入相应的值时,如何保存它们并识别它们属于哪个标题?
我尝试了this选项,但它仅适用于静态UITableView
(他们已经知道哪些字段属于值)
我将获得一系列字段,如“身高”,“血压”等。 我的用户界面是这样的
和我的代码部分
.m file is
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1; //count of section
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [fieldName count]; //dynamic field name array count
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *MyIdentifier = @"cell";
cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil)
{
cell = [[testCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:MyIdentifier];
}
NSString *uppercaseString = [[fieldName objectAtIndex:indexPath.row] uppercaseString];
cell.title.text=uppercaseString;//filed name
return cell;
}
从这个我如何得到输入文本值并保存它???
答案 0 :(得分:0)
我建议您使用专为动态tableview设计的FXForms。它使用键值编码模式保存和获取表单模型数据。
答案 1 :(得分:0)
如果从表单字段中获取值并存储它们是您的问题,请尝试此方法。我仍然不确定你究竟在寻找什么。
将表单字段对象添加到NSMutableArray。单击完成按钮后,遍历数组并获取相应的字段对象,用户从中输入值。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1; //count of section
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [fieldName count]; //dynamic field name array count
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *MyIdentifier = @"cell";
if (!self.fieldsArray) {
self.fieldsArray = [[NSMutableArray alloc]init];
}
cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil)
{
cell = [[CustomCell alloc]init]
}
NSString *uppercaseString = [[fieldName objectAtIndex:indexPath.row] uppercaseString];
cell.titleLabel.text=uppercaseString;//filed name
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 30, 250, 250)];
[cell.contentView addSubview:textField];
[self.fieldsArray addObject:textField];
}
return cell;
}
//Button Click
-(IBAction)doneSelection:(id)sender{
for (id *field in _testArray) {
if ([field isKindOfClass:[UITextField class]]) {
NSString* userEnteredValue = field.text;
}else if ([field isKindOfClass:[UISlider class]]){
//Handle for other types
}
}
}
答案 2 :(得分:0)
您可以使用相同的值标记每个标签和文本字段,假设row1将具有标记值1,而row2将具有标记值和文本字段将具有标记值2,因此您可以轻松识别该对并获取文本。像这样修改你的方法
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *MyIdentifier = @"cell";
cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil)
{
cell = [[testCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];
}
UILabel *lblTilte=[[UILabel alloc]init];
[lblTilte setFrame:<#(CGRect)#>];//set your own frame
NSString *uppercaseString = [[fieldName objectAtIndex:indexPath.row] uppercaseString];
[lblTilte setText:uppercaseString];//your title received from web service
lblTilte.tag=indexPath.row;//identify pair
[cell.contentView addSubview:lblTilte];
UITextField *inputTextField=[[UITextField alloc]init];
[inputTextField setFrame:<#(CGRect)#>];//set your own frame
inputTextField.tag=indexPath.row;//identify pair
[cell.contentView addSubview:inputTextField];
return cell;}
现在,当您收到输入时,请将其与标记匹配。您可以在文本字段委托方法中获取输入值,文本字段确实结束编辑,或者如果您有单元格选择方法,也可以检索值。
答案 3 :(得分:-2)
要在本地保存数据,您可以使用.Plist(属性列表)。
在NSMutableArray
方法中创建UITableView
并重新加载viewWillAppear
。
.Plist是存储数据或保存数据的最佳方式。 要么 您也可以使用核心数据。
或者,如果您的数据量非常少,则可以使用NSUserDefaults。