抱歉,我过去几个小时一直在研究这个问题。我在我的应用程序中使用MLPAutocomplete类作为自动完成文本字段。我在实现库时没有问题。但是,对于我的情况,我有四个文本字段,implementation that was described in the gitHub没有描述如何使用多个文本字段实现库。因此,为了向当前使用的文本字段提供正确的字符串数组,要检查四个文本字段中的哪一个被突出显示。以下是为自动填充文本字段提供数组的函数。
我基本上做的是在我的viewDidLoad
方法中,我初始化了四个文本视图的四个数组,并在下面的函数中possiblecompleteionsForString
,我做的是根据是否采用布尔值或不突出显示文本字段。基于此,我然后将正确的数组分配给完成数组(完成数组是文本字段中显示的数组)。但是,我注意到这在100%的时间都不起作用。在某些情况下,我的应用会显示不同的数组。例如,我为brandInput
文本字段设置了一个文本,并尝试输入partInput
textField,会发生的情况是日志显示以下内容:
2014-02-28 16:57:51.295 Database[7352:3f03] brand input Status active
2014-02-28 16:57:52.154 Database[7352:3f03] brand input Status active
2014-02-28 16:57:57.463 Database[7352:3f03] part input Status active
2014-02-28 16:57:57.465 Database[7352:3f03] brand input Status active
它设法检测到brandInput textField
处于活动状态,然后它还看到我切换到partInput
textField。但是,由于一个未知的原因,它仍然作为活动的brandInput
,给我一个错误的数组。
这是代码。
- (void)autoCompleteTextField:(MLPAutoCompleteTextField *)textField
possibleCompletionsForString:(NSString *)string
completionHandler:(void (^)(NSArray *))handler{
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(queue, ^{
NSMutableArray *completions = [[NSMutableArray alloc] init];
[completions removeAllObjects];
BOOL partInputStatus = partInput.highlighted;
BOOL brandInputStatus = brandInput.highlighted;
BOOL barcodeInputStatus = barcodeInput.highlighted;
BOOL itemNameInputStatus = itemNameInput.highlighted;
if(partInputStatus){
NSLog(@"part input Status active");
completions = [self part];
}
if(brandInputStatus){
NSLog(@"brand input Status active");
completions = [self brand];
}
if(barcodeInputStatus){
NSLog(@"barcode input Status active");
completions = [self barcode];
}
if(itemNameInputStatus){
NSLog(@"itemname input Status active");
completions = [self itemName];
}
handler(completions);
});
}
我该怎么做?我认为将brand
标记为非活动状态不会起作用,因为Boolean
变量会在函数开头重新初始化。
有没有其他方法可以检测哪个textField处于活动状态?我已经看到了一些解决方案,但是,这些是委托函数,我认为我不能从我的函数中调用它们。
非常感谢任何帮助。谢谢。
答案 0 :(得分:1)
这可能适合您的情况:BOOL partInputStatus = [partInput canResignFirstResponder];
OR
Matthias建议 BOOL partInputStatus = [partInput isFirstResponder];
如果输入字段是聚焦的(用户当前正在编辑它),它可以重新签名它的第一响应者状态(即关闭键盘并转到它的正常状态)。
答案 1 :(得分:0)
您可以这样做:
设置autocompleteTextField的标记。
由于这些是UITextField的扩展版本,因此它将调用textFieldDidBeginEditing:(UITextField*)textField
委托。从那里你可以检查哪个字段是活动的。
例如:
partInput.tag = 1;
brandInput.tag = 2;
barcodeInput.tag = 3;
itemNameInput.tag = 4;
和int textFieldDidBeginEditing:
-(void)textFieldDidBeginEditing:(UITextField *)textField{
if (textField.tag == 1) {
//partInput
}
else if (textField.tag == 2) {
//brandInput
}
else if (textField.tag == 3) {
//barcodeInput
}
else if (textField.tag == 4) {
//ItemNameInput
}
}
希望这会有所帮助.. :)