2014-02-25 1 views
-2

Я пытаюсь изменить данные о нажатии кнопки (в iPad) UICollectionViewCell? Как это достичь? Как отправить разные array count на номер numberOfItemsInSection на кнопку Нажмите?Как изменить данные UICollectionView при нажатии кнопки ios?

В моих viewDidLoad:

self.collectionViewImages=[[NSMutableArray alloc]initWithObjects:@"1.jpg",@"2.jpg",@"3.jpg",nil] ; 

Тогда в CollectionViewMethods:

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

    return [_collectionViewImages count]; 

} 


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

    UICollectionViewCell *myCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" 
           forIndexPath:indexPath]; 


    NSString *collectionViewImageName=[self.collectionViewImages objectAtIndex:indexPath.row]; 
    UIImageView * collectionImage = (UIImageView*)[myCell viewWithTag:11]; 

    collectionImage.image =[UIImage imageNamed:collectionViewImageName]; 

return myCell; 
} 

Тогда на ButtonClick-- (Как есть 4-5 кнопки я собираю тег каждой кнопки в NSInteger и используя этот объект в numberOfItemsInSection

-(void)btnTapped:(id)sender{ 
int tag= [(UIButton *)sender tag]; 
NSLog(@"Button Pressed%d",tag); 
_buttonIndex=tag; 
//_buttonIndex is NSInteger property 
//If i add object in NSMutableArray and call reloadData my UI hangs here only. 
//If I empty my NSMutableArray and add new objects in it and then call reloadData, I am getting NSRangeException. 
} 

И теперь я использую это свойство в numberOfItemsInSection как ...

if (_buttonIndex==1){ 

    [collectionImage setImage:[UIImage imageNamed:[_array1 objectAtIndex:indexPath.row]]]; 
    //My _array1 has 4 objects and my collectionViewImages array has 7 objects. 

    } 

я получаю сообщение об ошибке, как

*** Terminating app due to uncaught exception 'NSRangeException', 
reason: '*** -[__NSArrayM objectAtIndex:]: index 4 beyond bounds [0 .. 3]' 
+0

Вам необходимо обновить метод источника данных, который при необходимости возвращает соответствующее значение – CoolMonster

+0

call [myCollectionview reloadData] после изменения источника данных. –

+0

Измените источник данных 'UICollectionView' и вызовите' reloadData' на нем. Или вы хотите спросить что-то еще? – Amar

ответ

0

Я считаю, что вы просто спрашивают, как добавить/удалить данные из UICollectionView через IBAction. Вы просто добавили бы объект в свой источник данных UICollectionView's и перезагрузили его. Вот пример того, что-то добавить:

-(IBAction)addObject:(id)sender { 
    [self.objectArray addObject:@"new object"]; 
    [self.myCollectionView reloadData]; 
} 
+0

На самом деле я пытаюсь добавить объекты в массив в свой viewDidLoad. и передать arrayCount в числоOfItemsInSection. Когда я меняю элементы массива на метод buttonClick и перезагружаю его, он дает мне NSRangeException. Я не понимаю, что делать? –

+0

@SahebSingh, тогда вы лучше покажете нам эту ошибку и разместите свой код, а затем спросите, как обновить. Измените свой вопрос и опубликуйте функцию buttonClick –

+0

@SahebSingh вы выделили свой массив данных в 'viewDidLoad'? Вы ссылаетесь на свойство 'count' массива в любом месте вашего кода? – JMarsh

2

хорошо вы держите два массива с BOOL и на основе кранами вы relload в UicollectionView первый держать два массива

Declare BOOL

BOOL isChangeData; 

Ex:

self.collectionViewImages=[[NSMutableArray alloc]initWithObjects:@"1.jpg",@"2.jpg",@"3.jpg",nil] ; 

self.collectionViewImages1=[[NSMutableArray alloc]initWithObjects:@"4.jpg",@"5.jpg",@"6.jpg",nil] ; 

isChangeData = TRUE; 

Первый раз установить исходные данные, как Datasource

-(NSInteger)collectionView:(UICollectionView *)collectionView 
numberOfItemsInSection:(NSInteger)section 
{ 
    if(isChangeData){ 

    isChangeData = false; 

    return [_collectionViewImages1 count]; 
    } 

else{ 

    isChangeData = TRUE; 

    return [_collectionViewImages count]; 
} 

} 

в действии кнопки Make BOOL истинен и перезагрузить UICOllectionView

-(IBAction)changeData:(id)sender { 

[self.CollectionView reloadData]; 
} 

Надеется, что это работает, если я сделал какую-либо ошибку пожалуйста, поправьте меня.

+0

Блестящий! Абсолютно спасла мне жизнь! Единственное, что я хотел бы добавить, это то, что если вы вернетесь к исходному набору коллекции, вы можете создать что-то вроде - (IBAction) originalData: (id) sender {isChangeData = FALSE; [self.CollectionView reloadData]; } иначе isChangeData останется истинным независимо от того, сколько раз вы перезагружаете. –

+1

@mysticcola Привет, дайте мне знать ошибку, которую я сделал, и теперь я изменил код. Теперь код надежды выглядит нормально, и теперь он перезагружается с разными данными. И счастлив, что это тебе помогло. – Yohan

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