从自定义 UITableViewCell 访问 indexPath

发布于 2024-10-18 07:35:54 字数 902 浏览 6 评论 0原文

我正在尝试创建一个 UITableView 来允许用户输入数据,类似于 UITableView 的许多设置,其中包含一些文本字段和对其他表格视图的复选框的标注。对于应用程序中如此常见的功能,这似乎并不是很简单。

我在从自定义 UITableViewCell 访问 indexPath.row 时遇到问题。这是我分配自定义 UITableViewCell 的地方。

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[TextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];      
}

在我的 TextField 类的 @implementation 中,在 - (id)initWithStyle: 中,我尝试使用以下方式访问 indexPath:

NSIndexPath *indexPath = [(UITableView *)self.superview indexPathForCell:self];

... 以便设置文本字段的标签,例如:

textRow = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 200, 21)];
textRow.tag = [indexPath row];

任何人都可以阐明我的问题或指出我的问题吗?以编程方式创建基本设置样式 TableView 的方向。

谢谢

I'm trying to create a UITableView to allow the user to enter data, similar to a lot of the settings UITableViews, with some textfields and callouts to other tableviews for checkboxes. For such a common feature in apps, this does not seem to be very straight forward.

I'm having trouble accessing the indexPath.row from my custom UITableViewCell. Here is where I allocate my custom UITableViewCell.

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[TextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];      
}

In my TextField class's @implementation, in - (id)initWithStyle: I'm trying to access the indexPath with:

NSIndexPath *indexPath = [(UITableView *)self.superview indexPathForCell:self];

... in order to set the textfield's tag like:

textRow = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 200, 21)];
textRow.tag = [indexPath row];

Could anyone please shed some light on my problem or point me in the direction of creating basic setting-style TableViews programatically.

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝眼睛不忧郁 2024-10-25 07:35:54

我认为问题可能是在单元格初始化时它尚未添加到 UITableView - 因此 self.superview 返回 nil。

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[TextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];      
}
[cell setTag:indexPath.row];

您需要向 TextFieldCellClass 添加 setTag: 方法。我认为代码位于 cellForIndexPath 或其他内容中,因此 indexPath 将传递给该方法。

设置标签方法应该如下所示:

-(void)setTag:(int)tag {
    textRow.tag = tag;
}

I think the problem might be that at the time of initialisation of your cell it hasn't been added to the UITableView - hence self.superview is returning nil.

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[TextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];      
}
[cell setTag:indexPath.row];

You will need to add a setTag: method to your TextFieldCellClass. I presume that code was inside cellForIndexPath or whatever, so indexPath will be passed to that method.

The set tag method should look something like this:

-(void)setTag:(int)tag {
    textRow.tag = tag;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文