gpt4 book ai didi

ios - 在 View Controller 的 xib 中定义的 UITextFields 可以在 UITableViewCells 中使用吗?

转载 作者:行者123 更新时间:2023-11-28 23:01:42 26 4
gpt4 key购买 nike

我正在尝试做一些我认为相当简单且完全可以接受的事情。除了,似乎两者都不是。

我创建了一个 XIB,它的所有者是一个 View Controller 。在那个 XIB 中,我创建了多个 UITextFields,并将它们连接到 View Controller 中的适当 IBOutlets。 View Controller 也是包含在 Controller 主视图中的 UITableView 的委托(delegate)。

tableView: cellForRowAtIndexPath: 中,我然后按照您的期望创建一个 UITableViewCell(重用标识符等)。然后,我将适当的 IBOutletted UITextField(取决于当前行)添加到 UITableViewCell 的 contentView(首先在 UITextField 上调用 removeFromSuperview 之后)。

这在 View 最初加载时工作正常。但是,一旦我开始执行导致 UITableView 重新加载其数据的操作,UITextFields 就会发生奇怪的事情。也就是说,它们中的大多数开始从 tableview 中消失,而其他的则在宽度上急剧缩小。

那么,我是不是在做不该做的事情?您可以猜到,在 IB 中配置这些 UITextField 非常有用,只是它似乎是错误的方法。

来自 tableView 的代码片段:cellForRowAtIndexPath:下面...

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = nil;
int row = indexPath.row;

if (indexPath.section == kSectionReg) {
NSString *reuseIdent = @"RegCell";
cell = [aTableView dequeueReusableCellWithIdentifier:reuseIdent];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:reuseIdent] autorelease];
}
cell.detailTextLabel.font = [UIFont systemFontOfSize:15];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];


if (row == [self rowIndexForRegEmail]) {
[regEmailText removeFromSuperview];
[cell.contentView addSubview:regEmailText];
cell.detailTextLabel.text = @"Email";
} else if (row == [self rowIndexForRegPassword]) {
[regPasswordText removeFromSuperview];
[cell.contentView addSubview:regPasswordText];
cell.detailTextLabel.text = @"Password";
... etc...
}

return cell;
}

最佳答案

我不是 100% 确定,但我认为这是你的问题:

    [regEmailText removeFromSuperview];
[cell.contentView addSubview:regEmailText];

内存管理隐含在 View 层次结构中: View 拥有(保留)它们的 subview 。当您从它的父 View 中删除一个 View 时,它会被释放,如果没有其他东西保留它,它就会被释放。

每次表格 View 请求单元格时,您都在执行此操作,而不仅仅是首次创建单元格时:在第一遍中,当您调用 removeFromSuperview 时,文本字段仍被 something(1) 引用, 所以它仍然在下一行,您可以将它添加到单元格中。在随后的调用中,没有其他内容保留文本字段;当您将它从单元格中删除时,它会被释放,因此它会在您重新添加它的下一行消失——这就是它消失的原因。(2)

最直接的解决方法是确保文本字段不会消失——将其粘贴在保留/强大的ivar或属性中(或者只是retain它在你之前removeFromSuperviewrelease之后addSubview: ,如果你不使用 ARC)。另一种选择可能是为每个具有唯一文本字段的单元格使用不同的可重用单元格标识符。

更一般地说,您可能需要考虑 Apple 的 technique for static row content .或者甚至更好:如果您使用的是 iOS 5,则可以使用 Storyboard完全在 IB 中创建静态表格。


(1)(2):最初引用它的确切内容,以及为什么调整某些字段的大小,并不那么简单,部分取决于您的问题中未显示的内容。我现在得跑了——我的其余答案应该可以解决您的问题,我将编辑此答案的详细信息以便稍后进一步启发。

关于ios - 在 View Controller 的 xib 中定义的 UITextFields 可以在 UITableViewCells 中使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9898478/

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