将UITextFields输入组合到一个UITtextField中

时间:2012-10-16 17:38:14

标签: iphone ios uitextfield uitextview xcode4.3

我是xcode和Objective c的新手。我已经三次问过这个问题,但仍然找不到好的方法或答案。我有几个接受用户输入的uitextfields并按照IBAction的顺序将它添加到combinedtextField。用户在一个字段中输入大,在下一个字段中输入不好,在第三个字段输入boy,结果是combinedtextField中的大坏蛋。 / p>

-(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];
}

现在这是有趣的地方。我需要能够从combinedtextField中删除所选文本。

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

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

如果我点击removetextField2按钮,它会从combinedtextField中删除相应的文本(坏)然后它会读取(大男孩) 我调查了nsarrays,nsdictionarys和其他方法,并没有在哪里。 需要一些可能标记输入并以这种方式删除它的方法。示例代码非常棒,非常感谢。

2 个答案:

答案 0 :(得分:0)

你不能以一种非常微不足道的方式做到这一点(没有任何东西可以添加,只有1stroke魔术功能)。但是,有一种简单的方法,我可能会这样做。

如果您不需要多次这样做,和/或文本非常小(不像500页的书),那么:

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

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

如果你打算经常这样做并且文字真的很大,那么它会变得复杂得多。但我很确定,你不会在iOS上这样做。

答案 1 :(得分:0)

你遗漏了一些关于你的应用的重要细节,所以我正在猜测它应该如何运作。

也许您应该做的是保留已添加到组合字符串中的所有片段的可变数组:

@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: