类似的问题已经问了很多遍,并提到了许多解决方案,但是没有一个对我有用,因为它们要处理固定数量的单元格,而我具有动态的单元格数量。这是问题所在:
它在 Objective-C 中。我有一个具有动态行数(用户可以根据需要添加更多单元格或删除单元格)的tableview,并且每行包含3个文本字段,最后我想从该文本字段中获取数据并保存。从所有文本字段获取数据都可以正常工作,但是当我将数据添加到任何行(3个文本字段)时,这是主要问题,滚动时会重复。
这是代码:
-(void)textFieldDidEndEditing:(UITextField *)textField{
if ([_txtNumbers resignFirstResponder]) {
totalIndex = [_txtNumbers.text integerValue];
[_tblContacts reloadData];
}
}
- (IBAction)onAddCellClicked:(id)sender {
totalIndex = [_txtNumbers.text integerValue];
totalIndex = totalIndex + 1;
_txtNumbers.text = [NSString stringWithFormat:@"%ld",(long)totalIndex];
[_tblContacts reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return totalIndex;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"InviteEmailTableViewCell";
InviteEmailTableViewCell *cell = [self.tblContacts dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
cell.txtName.delegate = self;
cell.txtTell.delegate = self;
cell.txtEmail.delegate = self;
UIToolbar *numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
[numberToolbar setTintColor:kShadowColor1];
[numberToolbar setBarTintColor:[UIColor blackColor]];
numberToolbar.items = [NSArray arrayWithObjects:
[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad:)],
[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
[[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad:)],
nil];
cell.txtTell.inputAccessoryView = numberToolbar;
[cell.txtName setTag:indexPath.row];
[cell.txtTell setTag:indexPath.row];
[cell.txtEmail setTag:indexPath.row];
return cell;
}
接下来在这里做什么?
答案 0 :(得分:-1)
随着文本字段的重用,很明显输入值将被重复。
解决方案:
if(isset($_POST['Apply']))
{
$leave = $_POST['documentstatus'];
$documentstatus = "Pending";
$filename=$_FILES["pfimg"]["name"];
$tempname=$_FILES["pfimg"]["temp_name"];
$folder=rand(222,333333).$filename;
move_uploaded_file($tempname,"/student/".$folder);
mysqli_query($db,"insert into documentdetails values(null,'$empid','$leave','$folder','$documentstatus')");
echo "<script>window.location='documentupload.php';</script>";
}
方法上,将数据保存在数组中。textFieldDidEndEditing
方法中,对于每个单元格的每个文本字段,从数组中获取给定索引路径的数据,并为该文本字段设置相关值。答案 1 :(得分:-1)
正如其他人所提到的,您的tableview单元格和文本字段都在重用。由于这些文本字段没有被销毁和重新创建,因此您必须手动重置这些字段的状态。
Your datasource should be responsible for managing the view state.
正如Mehul在他的回答中所述,保留一个数据源以存储在文本字段中键入的文本(使用textfield标签作为indexPath.row可能会有所帮助),并在cellForRowAtIndexPath
中使用您的数据源更新这些文本字段的文本。
这种方法可确保视图和数据源之间的同步。