将UITextFields输入合并为一个UITextField



我是xcode和objective c的新手。我已经问了三次这个问题,但仍然找不到好的方法或答案。我有几个uitextfield,它们接受用户输入,并按照使用的IBAction的顺序将其添加到combinedtextField。用户在一个字段中输入大,在下一个字段输入坏,在第三个字段输入男孩,结果在combinedtextField中是大男孩。

-(IBAction)addtextField1: (id)sender
{
combinedtextField.text = [NSMutableString stringWithFormat:@"%@ %@",
combinedtextField.text,textField1.text];
}
-(IBAction)addtextField2: (id)sender
{
combinedtextField.text = [NSMutableString stringWithFormat:@"%@ %@",
combinedtextField.text,  textField2.text];
}
-(IBAction)addtextField3:(id)sender
{
combinedtextField.text = [NSMutableString stringWithFormat:@"%@ %@",
combinedtextField.text,textField3.text];
}

这就是它变得有趣的地方。我需要能够从组合文本字段中删除所选文本。

-(IBAction)removetextField1:(id)sender
{
//////////????????????////////////////
}
-(IBAction)removetextField2: (id)sender
{
//////////????????????////////////////
}
-(IBAction)removetextField3: (id)sender
{
//////////????????????////////////////
}   

如果我点击removetextField2按钮,它会从组合的textField中删除相应的文本(坏),然后它会显示(大男孩)我研究了nsarray、nsdictionarys和其他方法,但没有找到任何位置。需要某种可能标记输入并以这种方式删除它的方法。示例代码将不胜感激。

您遗漏了有关应用程序的一些重要细节,所以我对它应该如何工作进行了一些猜测。

也许您应该保留一个可变数组,其中包含已添加到组合字符串中的所有片段:

@implementation MyViewController {
    NSMutableArray *fragments_;
}
- (void)viewDidLoad {
[super viewDidLoad];
fragments_ = [[NSMutableArray alloc] init];
}

当点击其中一个添加按钮时,您将相应字段的文本附加到数组中,并重新计算组合字符串:

- (IBAction)addTextField1:(id)sender {
[fragments_ addObject:textField1.text];
[self updateCombinedTextField];
}
- (void)updateCombinedTextField {
combinedTextField.text = [fragments componentsJoinedByString:@" "];
}

当点击其中一个删除按钮时,您尝试从片段数组中删除相应字段的文本,并重新计算组合字符串:

- (IBAction)removeTextField1:(id)sender {
[fragments_ removeObject:textField1.text];
[self updateCombinedTextField];
}

这将从片段数组中删除所有出现的字段1的文本。如果只想删除一个实例,则需要使用indexOfObject:(或其变体之一),然后使用removeObjectAtIndex:

你不能用一种非常琐碎的方式来做这件事(没有任何添加,只有1笔划魔术函数)。但是,有一种简单的方法,我可能会选择。

如果你不需要做很多次,和/或文本很小(不像500页的书),那么:

创建一个名为mark的布尔数组,mark[i]应将第i个文本字段标记为"added"。然后,创建一个名为reloadCombinedTextField的函数,该函数将根据mark数组再次创建它。(如果是mark[i] == true,则添加文本字段的文本,否则不添加)
然后,只需在每个函数中标记或取消标记所需的文本字段,并在每次调用结束时调用重载函数。

还有另一种方法,但在文本字段具有相同文本的情况下,这可能是错误的。问题是,您只需在组合文本字段中搜索所选文本字段中的文本(例如,使用[NSString rangeOfString]方法)并将其删除

如果你经常这样做,而且文本真的很大,那么它就会变得复杂得多。但我敢肯定,你不会在iOS上这样做。

最新更新