2015-08-26 3 views
0

У меня есть некоторые компоненты в UICollectionViewCell, и я могу получить доступ ко всем внутри cellForItemAtIndexPath. Мне нужно, чтобы получить доступ к компоненту в пользовательском методе,Доступ к компонентам UICollectionViewCell в настраиваемом методе

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 
    // UIButton 
    cell.btn1.frame =CGRectMake(380,100, 150, 40); 
    [cell.btn1 addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside]; 
    return cell; 
} 

В пользовательском методе,

-(void)btnClicked{ 
MycollectionclassView *cell =[[MycollectionclassView alloc]init]; 
cell.btn1.backgroundColor =[UIColor greenColor]; 
} 

Здесь я не могу изменить цвет кнопки.

+0

Когда вам нужно получить доступ к соте? Как при выборе, или когда это видно или что-то еще. – Subash

+0

@Subash Когда это видно, я хочу получить к нему доступ. – Sabarish

+0

Я понял, что я хочу, чтобы «щелчок кнопки внутри UICollectionViewCell был запущен, и в этом методе наряду с другой операцией вы хотите изменить фон кнопки». Это вы хотите сделать ??? – Suryakant

ответ

0

Чтобы все было ясно, когда cellForItemAtIndexPath вызывается, это время, когда ваши ячейки укладываются в представление, в вашем пользовательском методе вы просто создаете объект ячейки, но этот объект не ссылается на объекты, которые выложены в ваш вид коллекции, поэтому просто измените цвет вновь созданного объекта, который ничего не ссылается.

1

Вы должны создать протокол и создать IBAction для метода. Когда вы вызываете метод действия, вы можете уведомить об этом протокол и его экран, на котором протокол UICollectionView получит это событие.

На вашем заголовке ячейки file.h определяют протокол:

@protocol YourCellNamelDelegate <NSObject> 

@required 
/** 
* Notifies that current ITEM was clicked on icon. 
* 
* @param cell The current cell that was clicked. 
*/ 
-(void)bookmarkClicked:(YourCellName *)cell; // OR without argument 


@interface YourCellName : UITableViewCell 

/** 
* Reference to 'YourCellNameDelegate' delegate. 
*/ 
@property (assign,nonatomic) id<YourCellNamelDelegate>delegate; 

... 

На ваш мобильный file.m

... 

- (IBAction)bookmarkClickAction:(id)sender { 

    // change or update screen element here ... 

    if (self.delegate) { 
     [self.delegate bookmarkClicked:self]; 
    } 

} 

На вашем ViewController реализовать свой протокол

@interface SMGListViewController() <YourCellNameDelegate> 


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

// get your cell here, for example in my case:  

    SMGCityGuideCollectionViewCell *cell; 
    cell = (SMGCityGuideCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; 

    SMGTouristInfo *touristInfo = [self.listTouristInfo objectAtIndex:indexPath.row]; 
    [cell setTouristInfoCell:touristInfo]; 

    // IMPORTANT HERE ************************* 
    cell.delegate = self; 
    // IMPORTANT HERE ************************* 

    return cell; 
} 
... 


#pragma mark <SMGPlaceCellDelegate> 

-(void)bookmarkClicked:(SMGPlaceCell *)cell { 

    // notify events here ... 

    NSIndexPath *index = [self.tableViewPlaces indexPathForCell:cell]; 
    [self.tableViewPlaces reloadRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationAutomatic]; 
} 

Надеюсь, это поможет! :)

+0

Когда мы используем протокол в iOS, мы должны зарегистрировать делегат для получения событий. –

0

В функции Button Click передать аргументы как отправитель, по которому в вызове функции вы можете получить доступ к ячейке collectionView как Sender.SuperView.

Теперь вы также можете найти индексный путь из коллекции.

Теперь, если вы хотите обновить пользовательский интерфейс ячейки коллекции, вам нужно будет сделать это в функции cellforItemAtIndexPath. который можно вызвать [collectionview reloadData].

Поэтому я бы предложил сохранить переменную флага в источнике данных, чтобы проверить, нужно ли обновлять интерфейс или нет.

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