gpt4 book ai didi

ios - UITableViewCell 上的 UITextField 停止响应触摸 - 可能是由于滚动到屏幕外造成的

转载 作者:行者123 更新时间:2023-12-02 15:49:23 24 4
gpt4 key购买 nike

我在动态创建的自定义 UITableViewCells 上有 UITextFields。我使用它们来输入数据(或者如果是编辑,则从核心数据中提取数据)并在 editingDidEnd 上将数据写回。

我的问题是我可以选择符合我心意的 UITextField,但如果它们滚出屏幕并再次返回,我将无法触摸 UITextField。

如果没有数据或者文本字段中有数据,都会发生这种情况。当单元格重新滚动时,数据仍然存在。

有趣的是,如果我触摸文本字段,调出键盘,将单元格滚动到屏幕外,再滚动回来,然后按键盘上的返回键,我可以再次选择该单元格。因此,当 UITextfield 是 theFirstResponder 时滚动单元格似乎可以保护它免受我在这里做错的任何事情的影响。

添加几行代码后,我确定我的触摸在未触摸单元格上的 UITextField 时会触发 didSelectRowATIndexPath。

我正在使用 Storyboard ,并且我似乎正确使用了单元标识符

有没有人经历过这种行为并建议我应该去哪里寻找?

任何建议将不胜感激,因为此时我已经花了近 3 天的时间用头撞墙试图弄清楚发生了什么

谢谢。

danypata 继承了 cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{ NSString *CellIdentifier;

if (indexPath.section == dLocation){
CellIdentifier=@"FacilityAddressCell";
}else {
CellIdentifier=@"FacilityGPSCell";
}

DLog(@"****CellIdentifier = %@",CellIdentifier);


UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

switch (indexPath.section) {


case dLocation:

{

FacilityAddressCell *theFacilityAddressCell = (FacilityAddressCell*) cell;

theFacilityAddressCell.facilityAddressField.placeholder = self.locationFieldNames[indexPath.row];

theFacilityAddressCell.accessoryType =UITableViewCellAccessoryNone;
theFacilityAddressCell.selectionStyle = UITableViewCellSelectionStyleNone;

switch (indexPath.row) {
case facilityName:
theFacilityAddressCell.facilityAddressField.text = self.currentOperation.name;
break;

case webSiteUrl:
DLog(@"self.cur.website = '%@'",self.currentOperation.website);
theFacilityAddressCell.facilityAddressField.text = self.currentOperation.website;
break;

case emailAddress:
DLog(@"self.cur.email = '%@'",self.currentOperation.email);

theFacilityAddressCell.facilityAddressField.text = self.currentOperation.email;
break;

case country:
DLog(@"self.cur.country = '%@'",self.currentOperation.country);
theFacilityAddressCell.facilityAddressField.enabled = NO;
theFacilityAddressCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
theFacilityAddressCell.facilityAddressField.text = self.currentOperation.country;
break;

case streetName:
DLog(@"self.cur.address = '%@'",self.currentOperation.address);
DLog(@"streetnames initial value is '%@'",self.currentOperation.address);
theFacilityAddressCell.facilityAddressField.text = self.currentOperation.address;
break;

case areaName:
DLog(@"self.cur.address2 = '%@'",self.currentOperation.address2);
theFacilityAddressCell.facilityAddressField.text = self.currentOperation.address2;
break;

case island:
DLog(@"self.cur.address3 = '%@'",self.currentOperation.address3);
theFacilityAddressCell.facilityAddressField.text = self.currentOperation.address3;
break;

case postCode:
DLog(@"self.cur.postcode ='%@'",self.currentOperation.postcode);
theFacilityAddressCell.facilityAddressField.text = self.currentOperation.postcode;
break;

case phoneNumber:
DLog(@"self.cur.phone ='%@'",self.currentOperation.phoneNumber);
theFacilityAddressCell.facilityAddressField.text = self.currentOperation.phoneNumber;
break;

case faxNumber:
DLog(@"self.cur.fax ='%@'",self.currentOperation.faxNumber);
theFacilityAddressCell.facilityAddressField.text = self.currentOperation.faxNumber;
break;

case tapToBringForward:
theFacilityAddressCell.facilityAddressField.enabled=NO;
theFacilityAddressCell.accessoryType =UITableViewCellAccessoryDisclosureIndicator;
theFacilityAddressCell.facilityAddressField.text =@"Use last location details";
break;

default:

break;
}

cell= theFacilityAddressCell;


}
break;

case dGPSLoc:
{
DLog( @"loading the [cell data");
GPSLocCell *theGPSLocCell = (GPSLocCell *)cell;
theGPSLocCell.latLabel.text= [self.currentOperation.latitude stringValue];
theGPSLocCell.longLabel.text=[self.currentOperation.longitude stringValue];
theGPSLocCell.lockedOrNotLabel.text = @"Locked";

cell= theGPSLocCell;

}
break;
}
return cell;

}

解决方案 - 问题是我正在重复使用单元格,其中一些单元格的 textfield.enabled 设置为 NO,并且它们以 NO 作为起始值被重复使用。哦。希望我的愚蠢可以帮助其他人。

经验教训 - 当您重用 UITableViewCell 或其子类时,它们会保留以前使用的设置,并且如果您有相同重用类型的某些单元格的格式不同,您最好确保将它们全部设置在 cellForIndexPath 中 - 而不是只是异常(exception):)

最佳答案

您的交换机中有几个位置可供您设置

theFacilityAddressCell.facilityAddressField.enabled = NO;

由于单元格被重用,如果您在一个地方禁用 UITextField,则需要在其他情况下将其设置回启用状态。

尝试将此行添加到 indexPath.row 上开关的正上方。

theFacilityAddressCell.facilityAddressField.enabled = YES;

这可以解释为什么它在你开始滚动之前起作用。如果您滚动一点,某些文本字段可能仍然有效,但如果您继续上下滚动,最终它们都会被禁用。

关于ios - UITableViewCell 上的 UITextField 停止响应触摸 - 可能是由于滚动到屏幕外造成的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16816631/

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