0

私が取り組んでいるプロジェクトがあり、自分の に検索を追加する必要がありますuitableview。私は多くのコードを見てきましたが、ほとんどは私が探しているものではなく、変更できません。誰かが私のに検索を追加するのを手伝ってくれませんかtableviewdetailviewまた、から押したいですsearcharray。前もって感謝します。

ここに.hがありますuitableview

#import <UIKit/UIKit.h>

@interface Reds : UITableViewController {
NSMutableArray *dummyArray;
}
- (void) setupData;

@end

ここは.muitableview

#import "Reds.h"
#import "RedsDetail.h"

@interface Reds ()

@end

@implementation Reds

- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
[self setupData];
}

- (void) setupData {
dummyArray = [[NSMutableArray alloc] init];

[dummyArray addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"dummy 1", @"name" , @"image1.JPG", @"image" , @"dummy 1 description textview", @"description", nil]];
[dummyArray addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"dummy 2", @"name" , @"image1.JPG", @"image" , @"dummy 2 description textview", @"description", nil]];
[dummyArray addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"dummy 3", @"name" , @"image1.JPG", @"image" , @"dummy 3 description textview", @"description", nil]];

}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}

#pragma mark - Table view data source

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [dummyArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

cell.textLabel.text = [[dummyArray objectAtIndex:indexPath.row] objectForKey:@"name"];
return cell;
}

#pragma mark - Table view delegate

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([[segue identifier] isEqualToString:@"DummyDetail"]){
    RedsDetail *dummyDetail = [segue destinationViewController];
    NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
    dummyDetail.dummyImageString = [[NSString alloc] initWithString:[[dummyArray objectAtIndex:indexPath.row] objectForKey:@"image"]];
    dummyDetail.dummyTextString = [[NSString alloc] initWithString:[[dummyArray objectAtIndex:indexPath.row] objectForKey:@"description"]];
    dummyDetail.title = [[NSString alloc] initWithString:[[dummyArray objectAtIndex:indexPath.row] objectForKey:@"name"]];
}
}

@end

ここに.hがありますdetailview

#import <UIKit/UIKit.h>

@interface RedsDetail : UIViewController {

IBOutlet UIImageView *dummyImage;
IBOutlet UITextView *dummyText;
NSString *dummyImageString;
NSString *dummyTextString;

}

@property (nonatomic, retain) NSString *dummyImageString;
@property (nonatomic, retain) NSString *dummyTextString;
@end

そして最後に .mdetailview

#import "RedsDetail.h"

@interface RedsDetail ()

@end

@implementation RedsDetail
@synthesize dummyImageString, dummyTextString;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];

dummyImage.image = [UIImage imageNamed:dummyImageString];
dummyText.text = dummyTextString;
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}

@end

ほとんどの人にとっては簡単な答えかもしれませんが、理解できず、助けが必要です. 皆さんが私を助けてくれたことに本当に感謝しています。また、回答に違いがある場合は、xcode 4.5 ios 6 ストーリーボードを使用しています。

エイドリアン

4

1 に答える 1

1

検索のために、searchArray と searchText を作成します。また、didChange メソッドを呼び出すテキストフィールドも必要です。

これを使用して、テキスト フィールドを didChange メソッドにリンクします。

[self.searchTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

次に、didChange で searchText を更新し、updateSearchArray を呼び出します。

-(void)textFieldDidChange:(UITextField*)textField
{
    searchTextString = textField.text;
    [self updateSearchArray];
}

比較する updateSearchArray では、元の配列 (dummyArray) を調べ、名前が検索に含まれている場合はそれを searchArray に追加します。

-(void)updateSearchArray
{
    if (searchTextString.length != 0) {
        searchArray = [NSMutableArray array];
        for ( NSDictionary* item in dummyArray ) {
            if ([[[item objectForKey:@"name"] lowercaseString] rangeOfString:[searchTextString lowercaseString]].location != NSNotFound) {
                [searchArray addObject:item];
            }
        }
    } else {
        searchArray = dummyArray;
    }

    [self.tableView reloadData];
}

現在ダミー配列を使用しているテーブルビュー メソッドで searchArray を使用します。

更新されたテーブルビュー メソッド

#pragma mark - Table view data source

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [searchArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    cell.textLabel.text = [[searchArray objectAtIndex:indexPath.row] objectForKey:@"name"];
    return cell;
}

また、すべてのデータを配列に追加した後に reloadData を呼び出す必要があります。updateSearchArray メソッドを追加

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setupData];
    [self updateSearchArray];
    [self.tableView reloadData];
}


これを簡単に実装できるように、サンプル プロジェクトを作成しました。ここからダウンロードできます: http://www.rolandkeesom.com/SearchExample.zip



于 2012-12-05T10:23:34.280 に答える