gpt4 book ai didi

iphone - UITextField 工件

转载 作者:行者123 更新时间:2023-11-29 04:44:46 28 4
gpt4 key购买 nike

我有一个 iPhone 应用程序,它有一个基于 TableView 的数据输入屏幕,带有一个切换开关,打开时会显示表格另一部分中的所有行。

有时,当应用程序首次加载时,通常是当它从手机中完全删除时,除了新行之外,还会显示表格原始部分中的 UITextFields,如下所示(主表格部分在上面) )

enter image description here :

最奇怪的是,这种行为仅在第一次显示此屏幕时发生 - 此后似乎很好。哦,而且它似乎只发生在手机上,而不是模拟器上。

考虑到其随机性,它是否与其他应用程序有关?我确实有同时运行的具有类似命名空间的应用程序。在我关闭应用程序/从手机中删除应用程序后,问题似乎消失了。

我已经包含了下面更改开关时运行的代码块:

- (void)accountSwitchChanged {
[customerDetails saveField:@"addToAccount" WithBool:addToAccountSwitch.on];

NSArray *indexes = [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:1 inSection:1], [NSIndexPath indexPathForRow:2 inSection:1], [NSIndexPath indexPathForRow:3 inSection:1],nil];

if (addToAccountSwitch.on)
[detailsTable insertRowsAtIndexPaths:indexes withRowAnimation:UITableViewRowAnimationFade];
else
[detailsTable deleteRowsAtIndexPaths:indexes withRowAnimation:UITableViewRowAnimationFade];
}

有什么想法吗?

--编辑

cellForRowAtIndexPath 代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// get rid of grey background for iPad app
[tableView setBackgroundView:nil];
UITableViewCell *cell = nil;
NSDictionary *cellData = [[dataSourceArray objectAtIndex: indexPath.section] objectAtIndex:indexPath.row];

id cellControl = [cellData objectForKey:kCellControlKey];

static NSString *kCellControl = @"CellControl";
cell = [tableView dequeueReusableCellWithIdentifier:kCellControl];

if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellControl] autorelease];
cell.textLabel.textColor = [[[ConfigManager sharedInstance].skin valueForKey:@"tableCellHeadingTextColour"] toUIColor];
cell.backgroundColor = [[[ConfigManager sharedInstance].skin valueForKey:@"tableCellBgColour"] toUIColor];
cell.textLabel.font = [UIFont boldSystemFontOfSize:17];
} else {
// a cell is being recycled, remove the old control (if it contains one of our tagged edit fields)
UIView *viewToCheck = nil;
viewToCheck = [cell.contentView viewWithTag:kDetailsViewTag];
if (!viewToCheck)
[viewToCheck removeFromSuperview];
}

// if control is not a text field, make it a button
if (![cellControl isKindOfClass:[UITextField class]])
cell.selectionStyle = UITableViewCellSelectionStyleGray;
else
cell.selectionStyle = UITableViewCellSelectionStyleNone;

cell.textLabel.text = [cellData objectForKey:kCellTitleKey];
[cell.contentView addSubview:cellControl];

return cell;
}

最佳答案

需要检查和消除的内容 如果它仅在第一次显示 View 时发生,则始终值得检查您在处理 View 之前是否假设 View 已加载。这种情况并不经常出现,但一旦出现就很难追踪。要检查这是否是您的问题,请在首次创建 View 后添加 [viewController view] 调用。这会强制加载 View 。如果添加此问题后问题消失,则说明您已跟踪问题的根源。您甚至可以保留 [viewController view] 调用作为修复,或者处理您的代码以允许延迟实例化。

所有这些,在你的 tableView:cellForRowAtIndexPath: 代码中更有可能是一些有趣的事情。如果您想要良好的堆栈溢出,请发布该代码的所有或相关片段(或其调用的相关代码)。

跟进发布的代码:

(1) if (!viewToCheck) [viewToCheck removeFromSuperview] 不会执行任何操作。当 viewToCheck 为零时,它只会发送一条removeFromSuperview 消息,并且不会执行任何操作。不确定这是否是关键问题,但这是需要纠正的问题。

(2) [cell.contentView addSubview:cellControl]; - 这看起来有问题 - 通常最好在创建单元格时仅添加 subview 。您可以在 tableView:cellForRowAtIndexPath: 的主体中隐藏或显示 - 我怀疑这对您有用。使用此代码存在一个风险,即当您只需要一个 subview 时,您将添加多个 subview ,或者(这可能是这里发生的情况)您最终不会在回收单元格时删除 subview 。如果 viewToCheck 代码应该删除添加的 cellControl,那么,如 (1) 所示,它现在不会执行此操作,因为您的 if 条件错误。

关于iphone - UITextField 工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9813637/

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