根据选定的表视图行更新 UILabel
Posted
技术标签:
【中文标题】根据选定的表视图行更新 UILabel【英文标题】:Update UILabel based on selected table view rows 【发布时间】:2015-06-19 14:33:12 【问题描述】:我有一个表格视图和一个文本字段。该人在该表格视图中选择的任何内容都将显示在文本字段中。
示例:在我的表格视图中选择“一”“二”“三”
如果我选择“one”,我的表格视图上会出现一个复选标记,并且“one”也会出现在我的文本字段中。
我知道如何使用 stringByAppendingString 将字符串添加在一起,所以当我选择“two”时,仍然选择“one”,我的标签将显示为“onetwo”
现在我的问题是:如果我要取消选择“一个”选项(或任何其他选项),我如何才能只删除此连接字符串的某个部分?
示例:如果我按此顺序选择“threeonetwo”并且我想取消选择“one”,我的标签现在将显示为“threetwo”。
谢谢。
更新:这是我到目前为止所做的,我被卡住了。
首先:我创建了一个可变数组:
NSMutableArray *toBeFilledTableData;
然后我分配它:
toBeFilledTableData = [[NSMutableArray alloc] init];
然后,如果用户从表格视图中选择选项,我将添加一个对象:
[toBeFilledTableData addObject:@"one"];
我改变了将文本字段显示为“threeonetwo”的想法,我想在两者之间添加一个分号,因此我希望外观为“three;one;two”。所以创建了一个字符串在末尾添加一个分号:
NSString *combinedForces
combinedForces = [toBeFilledTableData componentsJoinedByString:@";"]; (^ 但这并没有显示我的分号,所以我只是将分号添加到 addObject [除非有另一种方法])
然后我在我的文本字段中显示了该对象:
textField.text = combinedForces;
所以到目前为止,1. 我的列表没有填充,因为我单击了更多选项,2. 在每个选项之间插入分号正在成为一个难题。我会很感激任何帮助 =)
【问题讨论】:
根据您的新更新编辑了我的答案,请检查 【参考方案1】:您可以维护一个数组或包含所选项目的集合,而不是删除字符串的那部分。
在didSelectRowAtIndex
路径方法中,您将选定的字符串添加到数组(或将其删除)并调用updateLabel
方法,该方法从数组或集合的内容中创建一个字符串。
因此,每次发生更改时都会重新创建您的字符串。
如果你想知道选择的顺序,使用NSMutableOrderedSet
,如果你不需要知道顺序,你可以使用NSMutableSet
。
【讨论】:
酷,我已经有一个用于表格视图的数组: NSArray *tableData = [NSArray arrayWithObjects: @"One", @"Two", @"Three", nil];我不想从 tableview 中删除任何东西,只是从标签外观中删除。我该怎么办? 您有一个用于所选对象的单独数组。 At first, it's empty, when a row is selected, you add the object (string) to it, and later remove it on deselect. 这就是我所做的:我创建了我的可变数组:NSMutableArray *toBeFilledTableData;然后我分配它: toBeFilledTableData = [[NSMutableArray alloc] init];然后我只添加了一个对象:[toBeFilledTableData addObject:@"one"];然后我将该对象显示为我的标签: textField.text = [toBeFilledTableData objectAtIndex:indexPath.row];它显示得很好。现在,如果我想取消它,我添加了代码:[toBeFilledTableData removeObject:@"one"];问题:现在如何设置我的标签?因为 textField.text = [toBeFilledTableData objectAtIndex:indexPath.row];不起作用。 @the_fez 不要在评论中发布一堆代码。如果需要,请使用更多详细信息更新您的问题,以便人们在查看您的问题时看到并阅读它。【参考方案2】:你可以在 didSelectRowAtIndexPath 和 didDeselectRowAtIndexPath 中使用下面的代码来做到这一点
NSString *lblString = @"";
NSArray *indexPathArray = [self.tableView indexPathsForSelectedRows];
for(NSIndexPath *index in indexPathArray)
NSString *subStr = [arrayDatasource objectAtIndex:index.row]; //perticular choice from your choice array
if([indexPathArray lastObject]!=index)
lblString = [lblString stringByAppendingString:[subStr stringByAppendingString:@";"]];
else
lblString = [lblString stringByAppendingString:subStr];
【讨论】:
不要把这段代码放在这两种方法中。将此代码放在它自己的方法中,并从两个表视图委托方法中调用它。您还应该使用可变字符串,而不是附加和重新分配不可变字符串。以上是关于根据选定的表视图行更新 UILabel的主要内容,如果未能解决你的问题,请参考以下文章