2016-01-22 3 views
2

Я ранее создал три разных UICollectionView и разместил три разных пользовательских ячейки в каждом из них, связав их вместе с простой кнопкой панели вкладок. После некоторой помощи мне удалось сузить код до одного UICollectionViewController, и теперь мне просто нужно знать, как переключаться между каждой настраиваемой ячейкой через NavigationBarButton.Несколько пользовательских ячеек в одном UICollectionViewController, перекликающиеся между ними с помощью NavigationBarButton

Было бы также полезно, если бы я мог менять значок кнопок в зависимости от того, какую кнопку нажата кнопка (требуется три щелчка (ListView, SmallIconView и LargeIconView)).

Любые предложения?

ViewController.h

#import "GroupsViewController.h" 
#import "CustomCell.h" 

@interface GroupsViewController() 
{ 
    NSArray *arrayOfImages; 
    NSArray *arrayOfDescriptions; 
} 

@end 

@implementation GroupsViewController 
{ 
    NSString *reuseIdentifier; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    reuseIdentifier= @"SmallIcon"; 
    [[self GroupsCollectionView]setDataSource:self]; 
    [[self GroupsCollectionView]setDelegate:self]; 


    arrayOfImages = [[NSArray alloc]initWithObjects:@"ac-cars.png", nil]; 
    arrayOfDescriptions = [[NSArray alloc]initWithObjects:@"one", nil]; 

} 

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
{ 
    return 1; 
} 

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    return [arrayOfDescriptions count]; 
} 

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 


    CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; 

    [[cell IconImage]setImage:[UIImage imageNamed:[arrayOfImages objectAtIndex:indexPath.item]]]; 
    [[cell IconLabel]setText:[arrayOfDescriptions objectAtIndex:indexPath.item]]; 

    return SmallIcon; //error message (use of undeclared identifier) 

} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    //Dispose of any resources that can be recreated. 
} 

@end 

CustomCell.h

#import <UIKit/UIKit.h> 

@interface CustomCell : UICollectionViewCell 

@property (weak, nonatomic) IBOutlet UIImageView *IconImage; 
@property (weak, nonatomic) IBOutlet UILabel *IconLabel; 

@end 

я теперь соединил все три пользовательских ячейки в одно UICollectionView соединений все ярлыки и образы в одних и тех же точках. Collection View With 3 Custom Cells

Как вы можете видеть, теперь я удалил три контроллера вида и разместил все пользовательские ячейки в одном UICollectionView. Я связал все ярлыки и изображения с соответствующими точками.

Как подключить кнопку панели вкладок? и где я реализую код для кнопки в? Many Thanks

ответ

2

Вам понадобится только один collectionView с тремя customCells в нем.

Добавить три collectionViewCell Для макета пейзажа с другим reuseIdentifier для each.Then на каждую кнопку действие, изменить reuseIdentifier и перезагрузите CollectionView.

Это, как вы это делаете:

Объявите переменную NSString для reuseIdentifier из collectionViewCell как:

NSString reuseIdentifier; в секции реализации.

Затем в viewWillApper задан идентификатор по умолчанию для ячейки, которая является стандартной по умолчанию.

[email protected]"largeIconVIewCellIdentifier"; 

Тогда в кнопке действия кнопки навигационной панели, установите reuseIdentifier по мере необходимости и перезагрузить код collectionview.The будет как:

-(void)cellToggleAction 
{ 
if([reuseIdentifier isEqualToString:@"SmallIcon"]) 
[email protected]"ListView"; 
} 
else if ([reuseIdentifier isEqualToString:@"ListView"]) 
[email protected]"LargeIcon"; 
} 
else if ([reuseIdentifier isEqualToString:@"LargeIcon"]) 
[email protected]"SmallIcon"; 
} 
[collectionView reloadData]; 
} 

Вот это !! У вас все настроено. Ниже приведен образец изображения для справки.

Это три пользовательских набора с одинаковым классом, но различное повторное использование идентификаторов .

enter image description here

EDIT:

#import "GroupsViewController.h" 
#import "CustomCell.h" 

@interface GroupsViewController() 
{ 
    NSArray *arrayOfImages; 
    NSArray *arrayOfDescriptions; 
} 

@end 

@implementation GroupsViewController 
{ 
     NSString *reuseIdentifier; 

} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
     reuseIdentifier= @"SmallIcon"; 
    [[self GroupsCollectionView]setDataSource:self]; 
    [[self GroupsCollectionView]setDelegate:self]; 


    arrayOfImages = [[NSArray alloc]initWithObjects:@"ac-cars.png", nil]; 
    arrayOfDescriptions = [[NSArray alloc]initWithObjects:@"one", nil]; 
} 

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
{ 
    return 1; 
} 

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    return [arrayOfDescriptions count]; 
} 

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 


    CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier1 forIndexPath:indexPath]; 

    [[cell SmallIconImage]setImage:[UIImage imageNamed:[arrayOfImages objectAtIndex:indexPath.item]]]; 
    [[cell SmallIconLabel]setText:[arrayOfDescriptions objectAtIndex:indexPath.item]]; 

    return SmallIcon; 


} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    //Dispose of any resources that can be recreated. 
} 

@end 

и в файле CustomCell.h:

 #import <UIKit/UIKit.h> 

@interface CustomCell : UICollectionViewCell 

//Small Icon 
@property (weak, nonatomic) IBOutlet UIImageView *SmallIconImage; 
@property (weak, nonatomic) IBOutlet UILabel *SmallIconLabel; 
@end 

добавить также buttonAction, что я добавил выше.

+0

Пробуйте код и сообщать мне, если у вас есть какие-либо сомнения. – abhi1992

+0

Как мне вставить текущий код, который вы указали в мой текущий код? я опубликую код сейчас и спасибо за ваш ввод, то, что ваши объяснения и показ в изображениях именно то, что я хочу сделать. –

+0

Вы сделали это трудным способом. Просто создайте выходное изображение imageView и описание Разъем Label в customCell.h и соедините все изображения и ярлыки трех ячеек с этими двумя выходами. – abhi1992

0

Я предлагаю использовать enum и владеть недвижимостью для этого enum. Переключите enum с помощью кнопки, а в sizeForItemAtIndexPath: установите три разных размера для каждого условия на основе enum. Когда размер переключается на кнопку, не забудьте позвонить reloadData после того, как вы установили свойство.

Если ячейке необходимо отрегулировать свой макет на высоту (за исключением увеличения высоты), вы можете иметь класс ячейки enum и применять стиль для каждой предполагаемой высоты. Убедитесь, что оно общедоступно, поэтому свойство в VC может ссылаться на него и применять его к ячейке в пределах cellForItemAtIndexPath: вместе с sizeForItemAtIndex:.

 Смежные вопросы

  • Нет связанных вопросов^_^