3

オートコンプリート用にUITextView接続されているがあります。UITableView

問題は、テーブルの表示が適切にフォーマットされていないことです。これに関して次の問題があります。

  1. 詳細が順番に並んでいません(例:aを押すと、単語が最初から表示されないので、好きなように表示されます)。

  2. txtファイルに3種類の単語があります(Apple、A pple、A.ppleなど)。私のテーブルでは、A ppleとA.ppleのみが表示されますが、Appleではなく文字「Ap」で検索を開始すると、「A P」と書くまではAppleが表示され、単語の表示は停止します。

誰かが私にそれをどうするか教えてもらえますか?

参考までに私のコードを見つけてください:

すべてのコードを投稿して申し訳ありませんが、うまくいかなかったことがわからないのでやっています!!!

- (void) finishedSearching {
    [usernameField resignFirstResponder];
    autoCompleteTableView.hidden = YES;
}

- (void)viewDidLoad
{
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"employee.txt" ofType:nil];
    NSData* data = [NSData dataWithContentsOfFile:filePath];
    //Convert the bytes from the file into a string
    NSString* string = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding];

    //Split the string around newline characters to create an array
    NSString* delimiter = @"\n";
    NSArray *item = [string componentsSeparatedByString:delimiter];
    elementArray = [[NSMutableArray alloc] initWithArray:item];
    usernameField = [[UITextField alloc] initWithFrame:CGRectMake(204, 405, 264, 31)];
    usernameField.borderStyle = 3; // rounded, recessed rectangle
    usernameField.autocorrectionType = UITextAutocorrectionTypeNo;
    usernameField.autocapitalizationType = UITextAutocapitalizationTypeNone;
    usernameField.textAlignment = UITextAlignmentLeft;
    usernameField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    usernameField.returnKeyType = UIReturnKeyDone;
    usernameField.font = [UIFont fontWithName:@"Trebuchet MS" size:20];
    usernameField.textColor = [UIColor blackColor];
    usernameField.placeholder=@"Login id";
    [usernameField setDelegate:self];
    [self.view addSubview:usernameField];

    autoCompleteArray = [[NSMutableArray alloc] init];
    autoCompleteTableView = [[UITableView alloc] initWithFrame:CGRectMake(204, 450, 264, tableHeight) style:UITableViewStylePlain];
    autoCompleteTableView.delegate = self;
    autoCompleteTableView.dataSource = self;
    autoCompleteTableView.scrollEnabled = YES;
    autoCompleteTableView.hidden = YES; 
    autoCompleteTableView.rowHeight = tableHeight;
    [self.view addSubview:autoCompleteTableView];
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
- (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring {

    // Put anything that starts with this substring into the autoCompleteArray
    // The items in this array is what will show up in the table view

    [autoCompleteArray removeAllObjects];

    for(NSString *curString in elementArray) {
        NSRange substringRangeLowerCase = [curString rangeOfString:[substring lowercaseString]];
        NSRange substringRangeUpperCase = [curString rangeOfString:[substring uppercaseString]];
        if (substringRangeLowerCase.length != 0 || substringRangeUpperCase.length != 0) {
            [autoCompleteArray addObject:curString];
        }
    }
    autoCompleteTableView.hidden = NO;
    [autoCompleteTableView reloadData];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
    [super touchesBegan:touches withEvent:event];
    [self finishedSearching];
}

#pragma mark UITextFieldDelegate methods

// Close keyboard when Enter or Done is pressed
- (BOOL)textFieldShouldReturn:(UITextField *)textField {    
    BOOL isDone = YES;

    if (isDone) {
        [self finishedSearching];
        return YES;
    } else {
        return NO;
    }   
} 

// String in Search textfield
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *substring = [NSString stringWithString:textField.text];
    substring = [substring stringByReplacingCharactersInRange:range withString:string];
    [self searchAutocompleteEntriesWithSubstring:substring];
    return YES;
}

#pragma mark UITableViewDelegate methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) section {

    //Resize auto complete table based on how many elements will be displayed in the table
    if (autoCompleteArray.count >=3) {
        autoCompleteTableView.frame = CGRectMake(204, 450, 264, tableHeight*3);
        return autoCompleteArray.count;
    }

    else if (autoCompleteArray.count == 2) {
        autoCompleteTableView.frame = CGRectMake(204, 450, 264, tableHeight*2);
        return autoCompleteArray.count;
    }   

    else {
        autoCompleteTableView.frame = CGRectMake(204, 450, 264, tableHeight);
        return autoCompleteArray.count;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = nil;
    static NSString *AutoCompleteRowIdentifier = @"AutoCompleteRowIdentifier";
    cell = [tableView dequeueReusableCellWithIdentifier:AutoCompleteRowIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:AutoCompleteRowIdentifier] ;
    }

    cell.textLabel.text = [autoCompleteArray objectAtIndex:indexPath.row];
    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
    usernameField.text = selectedCell.textLabel.text;
    usernameField.text=[usernameField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

    NSLog(@"%@",usernameField.text);
    [self finishedSearching];
}



- (void)viewDidUnload
{

    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

前もって感謝します!!!!

4

1 に答える 1

2

このコードに従ってください。Uはすべて正しく実行しましたが、要素の検索が問題です。Uはコードを書きました。チェックの長さだけの場合。nullでない場合は、データが表示されます。ただし、最初の文字を要素配列と比較する必要があります。それがうまくいくように。

- (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring {
    [autocompleteArray removeAllObjects];

    for(NSString *curString in elementArray) {
        NSRange substringRange = [curString rangeOfString:substring];
        if (substringRange.location == 0) {            
            [autocompleteArray addObject:curString];          
        }        

        [autocompleteTableView reloadData];
    }
}
于 2012-07-06T05:40:26.713 に答える