我有一个UITableView
,每个UITableViewCell
都包含一个可编辑的UITextView
。
我的数据源是NSMutableArray
,其中包含NSMutableDictionary
,其中包含文本的文本值和一些样式键。
我如何(有效地)创建它以便用户对UITextView所做的任何更改都会在相应的数据源NSMutableDictionary
中更新?
答案 0 :(得分:1)
首先,您必须为每个UITextView分配一个标签,以确切地知道您所引用的UITextView。
然后,您必须在包含tableview的视图控制器中实现UITextViewDelegate。然后,使此视图控制器成为每个UITextView的委托。请在此处阅读如何实施它:UITextViewDelegate reference。
寻找更符合您需求的协议方法(可能是 - textView:shouldChangeTextInRange:replacementText:,每次文本在任何范围内更改时都会调用它。
在委托方法中,您可以使用UITextView.text属性读取文本,并将此值分配给您的数据模型(字典)。
另一种可能的方法是使用KVO模式,但它需要更多编码并更好地理解模式和实现。希望它有所帮助!
答案 1 :(得分:1)
一种相当简单的方法是利用表的索引路径,它不是最干净的,因此它取决于数据源的复杂性,以及是否有多个表等。
你可以做的是当用户结束编辑textView或在tableView中选择另一行时,你读取所选行的indexPath(这要求该行在编辑textView时保持实际处于选中状态默认情况下)。从那里你可以调用你的更新方法。
要结束编辑,请执行
-(void)textViewDidEndEditing:(UITextView *)textView
{
NSIndexPath *selectedpath = [myTable indexPathForSelectedRow];
[self myUpdateMethodForIndexPath:selectedpath];
}
要捕获表行的取消选择并且上面没有被调用,请实现
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self myUpdateMethodForIndexPath:indexPath];
}
然后,您的更新方法必须在indexPath的相应单元格中读取textView的值,并在数据源中处理此值。要关注部分当然需要正确处理indexPath,在示例中只使用了行(1节)。
-(void)myUpdateMethodForIndexPath:(NSIndexPath *)editPath
{
UITableViewCell *editCell = [myTable cellForRowAtIndexPath:editPath];
NSString *newText = editCell.theTextView.text;
....
NSMutableDictionary *dict = [myDictArray objectAtIndex:editPath.row];
....
}
答案 2 :(得分:0)
使您的视图控制器成为每个文本视图的委托。收听适当的事件以获取更新的文本。然后让视图控制器使用更新的文本更新数据模型。
如果您有自定义单元格,则将单元格设置为文本视图委托。然后,单元格应通知其委托(视图控制器)有关更新的文本。当然,这需要您的自定义单元类定义自己的委托协议,视图控制器应该使自己成为每个单元的委托。
对于这样一个模糊的问题,具体的答案可能就是这样。