UITableView индексирования списка abcd - PullRequest
0 голосов
/ 14 сентября 2011

Мне нужно реализовать индексирование списка abcd в приведенном ниже представлении таблицы справа. Когда я щелкаю по представлению таблицы a / b / c и т. Д., Нужно показать записи в соответствии с тем, что для сортировки , как в iphone контакты .Могу я знаю, что все изменения, которые мне нужны для этого. Нужно создать разделы для этого? пожалуйста, кто-нибудь объяснить мне любое решение.

У меня есть класс с именем " myClass ", который содержит свойства iD, name и imageURL.

URL-адрес изображения содержит URL-адрес фотолаборатории.

myClass.h

@interface myClass: NSObject {
    NSInteger iD;
    NSString *name;
    NSString *imageURL;
}

@property (nonatomic, assign) NSInteger iD;
@property (nonatomic, assign) NSString *name;
@property (nonatomic, assign) NSString *imageURL;

myClass.m

@implementation myClass

@synthesize iD;
@synthesize name;
@synthesize imageURL;

@end

Итак, я добавил 50 деталей изображения с iD, name, imageURL в виде myClass объектов в NSMutableArray с именем * BundleImagesArray *

я отобразил его в виде таблицы. мой код:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) section {
    //getting all image details with iD,name,imageURL as **myClass** objects     
    BundleImagesArray = [staticDynamicHandler getImageFromBundle];

    int count =  [BundleImagesArray count];

    for (int i = 0; i<count; i++) {
        //this array for easy scrolling after first time the table is loaded.
        [imageCollectionArrays addObject:[NSNull null]];

    }
    return count;

}

cellForRowAtIndexPath

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

    //removing all the subviews
    if ([cell.contentView subviews]) {
        for (UIView *subview in [cell.contentView subviews]) {
            [subview removeFromSuperview];
        }
    }

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    [cell setAccessoryType:UITableViewCellAccessoryNone];

    myClass *temp = [BundleImagesArray objectAtIndex:indexPath.row];


    //adding image view 
    UIImageView *importMediaSaveImage=[[[UIImageView alloc] init] autorelease];
    importMediaSaveImage.frame=CGRectMake(0, 0, 200,135 );
    [cell.contentView addSubview:importMediaSaveImage]; 

    //adding image label
    UILabel *sceneLabel=[[[UILabel alloc] initWithFrame:CGRectMake(220,0,200,135)] autorelease]; 
    sceneLabel.font = [UIFont boldSystemFontOfSize:16.0];
    sceneLabel.textColor=[UIColor blackColor];
    [cell.contentView addSubview:sceneLabel];

    sceneLabel.text = temp.name;

    if([imageCollectionArrays objectAtIndex:indexPath.row] == [NSNull null]){ 

        //getting photlibrary image thumbnail as NSDAta
        NSData *myData = [self photolibImageThumbNailData::temp.imageURL]

        importMediaSaveImage.image =[UIImage imageWithData:myData ];

        [imageCollectionArrays replaceObjectAtIndex:indexPath.row withObject:importMediaSaveImage.image];
    } else {
        importMediaSaveImage.image = [imageCollectionArrays objectAtIndex:indexPath.row];
    }

    temp = nil;
    return cell
}

* Примечание: * я сделал это следующим образом 1. Количество разделов внутри этого мы получаем массив меток, а затем вызываем метод countArrayWords, который будет считать слова и алфавиты, начинающиеся с определенного слова. 2. Название заголовка в разделе Используется для получения заголовков для разделов. В настоящее время мы не используем этот метод, так как он будет выглядеть не очень хорошо, когда мы имеем нет данных в табличном представлении. 3. количество строк в разделе в этом мы вызываем метод countArrayWords, если sectio = 0. 4. ячейка для строки в пути индекса это метод, в котором мы вычисляем переменную, известную как h, с помощью которой мы привязываем изображения к таблице Посмотреть. Однако представление Tableview слишком медленное с 1000 изображений

1 Ответ

1 голос
/ 14 сентября 2011

Простой способ справиться с этим - создать 2 массива, один из разделов и другой из заголовков разделов. Затем вы можете заполнить их из отсортированного массива MyClass'ов в вашем методе init (initWithObjects: скажем)

- (id) initWithObjects: (NSArray *) myObjectsArray
{
    self  = [super initWithNibName: <your-nib-name> bundle: nil];

    if (self) {
        self.sections = [NSMutableArray array];
        self.sectionTitles = [NSMutableArray array];

        for (MyClass * object in self.myObjectsArray) {
            NSMutableArray * section = [self.sections lastObject];

            if (!section || ![[[[section lastObject] name] substringToIndex: 1] isEqualToString: [object.name substringToIndex: 1]]) {
                // Create a new section on change of first character

                [self.sections addObject: [NSMutableArray array]];
                [self.sectionTitles addObject: [object.name substringToIndex: 1]];
            }

            [[self.sections lastObject] addObject: object];
        }
    }

    return self;
}

Тогда ваши методы источника данных

- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
    return [self.sections count];
}

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[self.sections objectAtIndex: section] count];
}

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

    MYClass * object = [[self.sections objectAtIndex: indexPath.section] objectAtIndex: indexPath.row];

    //Configure cell

    return cell;    
}

- (NSArray *) sectionIndexTitlesForTableView:(UITableView *)tableView
{
    return self.sectionTitles;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...