gpt4 book ai didi

iphone - UITableView 内的 UITextView

转载 作者:行者123 更新时间:2023-12-03 18:40:56 25 4
gpt4 key购买 nike

我知道这个问题以前曾被问过,但我似乎找不到我想要的东西。我的应用程序中有一个部分,其中有一个表格 View ,其中有一个 TextView 。我不想为 tableview 单元格创建单独的 .xib、.h 和 .m 文件。 TableView 不需要根据 TextView 内的文本量缩小或增长。我也不希望 TextView 可编辑。我希望这不是一个过分的要求,尽管我现在真的很困难。

最佳答案

为此,您需要在 UITableViewCell 中嵌入一个。但无需创建自定义单元格。以下是您想要做什么的基本想法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UITextView *comment = [[UITextView alloc] initWithFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, tableView.rowHeight)];
comment.editable = NO;
comment.delegate = self;
[cell.contentView addSubview:comment];
[comment release];
}
return cell;
}

当然,如果您不想要单元格附带的标准 44pt 高度,则需要设置 rowHeight。如果您想要实际的单元格,则需要添加自己的逻辑,以便只有您想要的单元格才是 textView,但这是基本思想。其余的部分由您根据您的装修进行定制。希望这有帮助

编辑:要绕过 textView 到达您的单元格,有两种方法可以实现此目的。

1)你可以创建一个自定义的textView类并覆盖touchesBegan来发送消息给super:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
}

这会将触摸事件发送到其 super View ,即您的 tableView。考虑到您不想创建自定义 UITableViewCells,我想您可能也不想创建自定义 textView 类。这让我想到了第二个选项。

2) 创建textView时,去掉comment.editable = NO;。我们需要保持它可编辑,但会在委托(delegate)方法中修复它。

在您的代码中,您需要插入一个 textView 委托(delegate)方法,我们将从那里完成所有工作:

编辑:更改此代码以与 UITableViewController 一起使用

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
// this method is called every time you touch in the textView, provided it's editable;
NSIndexPath *indexPath = [self.tableView indexPathForCell:textView.superview.superview];
// i know that looks a bit obscure, but calling superview the first time finds the contentView of your cell;
// calling it the second time returns the cell it's held in, which we can retrieve an index path from;

// this is the edited part;
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
// this programmatically selects the cell you've called behind the textView;


[self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
// this selects the cell under the textView;
return NO; // specifies you don't want to edit the textView;
}

如果这不是您想要的,请告诉我,我们会帮您解决

关于iphone - UITableView 内的 UITextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5997708/

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