带有自定义 textview 的 iphone tableview 单元格 - 获取 textview 参考
Posted
技术标签:
【中文标题】带有自定义 textview 的 iphone tableview 单元格 - 获取 textview 参考【英文标题】:iphone tableview cells with custom textview - get textview reference 【发布时间】:2010-02-22 20:00:55 【问题描述】:我有一个包含 15 个单元格的 UITableView,每个单元格中都有一个单独的文本框。 我已经实现了 UITextViewDelegate 并且能够使用 textViewDidChange (等)接收更改的 textview 数据。但是我还有一个大问题,我怎么知道哪个 textview 发送了这个,(即 textview 在哪个单元格中被改变了?)
有这么多工作很有趣,但不知道它的确切来源。
如果需要,可以使用一大堆代码。
问候@norskben
代码
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
//Big Text Box
UITextView *detailLabel = [[UITextView alloc] initWithFrame:CGRectMake(30, 80, CONST_Cell_width, 150)];
detailLabel.tag = 20;
[cell.contentView addSubview:detailLabel];
UITextView * detailLabel = (UITextView *) [cell.contentView viewWithTag:20];
【问题讨论】:
【参考方案1】:您可以将标签(整数)分配给不同的视图并查询标签号以查看哪个视图调用了该方法。在视图上查找标签属性:
tag
The receiver’s tag, an integer that you can use to identify view objects in your application.
@property(nonatomic) NSInteger tag
see here
【讨论】:
【参考方案2】:不是在我的开发机器上,但是当您创建 UITextView 时,您应该能够为其分配一个标签。我认为是 [myTextView setTag:x];其中 x 是一个整数。
然后,在 TextViewDidChange 中使用
if (textview.tag == x)
//do something
else if (textview.tag == y)
//do something else and so on
希望能有所帮助。
【讨论】:
【参考方案3】:文本视图在每个委托方法中传递对自身的引用,以便您知道是哪一个发送了它。为了与单元格建立连接,我将每个文本视图的 tag
属性设置为与它们所在单元格的行相对应的不同值。
【讨论】:
【参考方案4】:这是一个重要的问题:您的文本框是静态的,还是会随着时间而改变?如果它们不会更改(用户不能更改单元格的数量或以后添加更多),那么您可以为每个单元格声明一个新的 textField。我的应用程序中有类似的东西。我有两个文本框,根据当前处于活动状态的 textField,委托会做一些不同的事情。
在标题中声明单独的文本字段
UITextField *textField1;
UITextField *textField2;
UITextField *textField3;
在委托方法中,使用 if 语句块来找出哪个 textField 正在改变:
if (textField == textField1)
//do something
else if (textField == myTextField2)
//something else
请注意,这仅在您的视图是静态的情况下才有效。
希望对你有帮助
祝你有美好的一天
【讨论】:
如果一个单元格被重复使用怎么办?原帖提到 UITableView 中有 15 个单元格。假设原始海报没有禁用单元格重用,则不能保证特定的 UITextView 始终与同一个单元格相关联。 你是对的。您必须使用 switch 或 if 语句块将每个 textField 添加到单元格的 contentView,明确选择哪个 textField 进入哪个单元格 indexPath。值得注意的是,当您将 textField 滚动出屏幕时,textBox 内的数据会随着单元格的重新加载而消失。【参考方案5】:当您在 UITableView 的单元格中搜索事件源 UITextView 时,仅遍历用户当前可以看到的单元格。这可以使用以下 UITableView 方法获得:
- (NSArray *)visibleCells
【讨论】:
以上是关于带有自定义 textview 的 iphone tableview 单元格 - 获取 textview 参考的主要内容,如果未能解决你的问题,请参考以下文章
自定义TextView带有各类.ttf字体的TextView
Android:带有自定义标题的圆角TextView XML布局