2017-10-04 101 views
0

我有一個用戶想要在其中輸入年份的文本框。我在textfield下面有一個tableview,我在其中傳入了一個數組。當用戶輸入年份時,表格視圖應該在表格視圖中顯示從數組開始的年份列表,並且它應該匹配數組中的前兩個單詞。我試過了一段代碼,但它並沒有顯示它的年數。我的代碼是這樣的,IOS中的自動完成textfield多年

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

NSLog(@"Range:%@",NSStringFromRange(range)); 
NSLog(@"%@",textField.text); 

NSString *passcode = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

NSLog(@"%@",passcode); 


NSPredicate *predicate = [NSPredicate predicateWithFormat: 
          @"SELF CONTAINS %@",passcode]; 
year1Array = [year1Array filteredArrayUsingPredicate:predicate]; 
NSLog(@"%@", year1Array); 

if ([year1Array count]==0) { 
    _year01.hidden=true; 
}else{ 
    _year01.hidden = FALSE; 
} 

[_year01 reloadData]; 


return TRUE; 

} 

的實現代碼如下代碼是這樣的,

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if (tableView==_year01) { 
     return [year1Array count]; 
    }else{ 
     return [year2Array count]; 
    } 
    return YES; 
} 



    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
    if (tableView == _year01){ 
     cell.textLabel.text=[year1Array objectAtIndex:indexPath.row]; 
    }else{ 
     cell.textLabel.text=[year2Array objectAtIndex:indexPath.row]; 
    } 

    cell.backgroundColor=[UIColor grayColor]; 
    cell.textLabel.textColor=[UIColor whiteColor]; 
    return cell; 

} 

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *selectedCell=[tableView cellForRowAtIndexPath:indexPath]; 

    if (tableView == _year01){ 
     self.year1.text=[year1Array objectAtIndex:indexPath.row]; 
     self.year01.hidden=YES; 
    }else{ 
     self.year2.text=[year2Array objectAtIndex:indexPath.row]; 
     self.year02.hidden=YES; 
    } 
} 

回答

0

只要改變CONTAINS[cd]NSPredicate

​​

編輯:

了您發出哪裏你錯了

year1Array = [year1Array filteredArrayUsingPredicate:predicate]; 

要添加濾波的結果year1Array你的主陣列,所以當你不會得到結果意味着0那麼你的主陣列也將是0這就是爲什麼你面對這種類型的問題。

所以採取一個全球陣列爲例。

@property(nonatomic,strong)NSMutableArray * temStaticArray;

添加year1ArraytemStaticArray只有一次喜歡。

[temStaticArray addObjectsFromArray:year1Array]; 

現在改變你的邏輯在shouldChangeCharactersInRange

if (year1Array.count > 0){ 
    [year1Array removeAllObjects]; 
} 
NSPredicate *predicate = [NSPredicate predicateWithFormat: 
          @"SELF CONTAINS %@",passcode]; 
year1Array = [temStaticArray filteredArrayUsingPredicate:predicate]; 
NSLog(@"%@", year1Array); 

if ([year1Array count]==0) { 
    [year1Array addObjectsFromArray:temStaticArray]; 
    _year01.hidden=true; 
}else{ 
    _year01.hidden = FALSE; 
} 

[_year01 reloadData]; 
+0

讓我試試。 @iPatel – Raheel

+0

Bro只有一次顯示錶格視圖,當我重新回到不顯示tableview的那一年時。 @iPatel – Raheel

+0

如果([year1Array count] == 0)無法獲得您的條件if { _year01.hidden = true; } else { _year01.hidden = FALSE; } 如果它是真的,那麼你的表格將被顯示,否則它將被隱藏 – iPatel