2016-08-25 2 views
1

Я хочу сохранить свой идентификатор рецепта в качестве идентификатора сеанса, когда я нажимаю кнопку внутри UICollectionView. Может ли кто-нибудь дать мне решение для этого. Я устанавливаю значение тега как свой идентификатор рецепта, но я не уверен, что это правильный путь.Как я могу передать свой идентификатор из UICollectionView

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

[self.mySpinner stopAnimating]; 

static NSString *identifier = @"Cell"; 

UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; 

UIButton *recipeid= (UIButton *)[cell.contentView viewWithTag:107]; 

[recipeid addTarget:self 
       action:@selector(aMethod:) forControlEvents:UIControlEventTouchUpInside]; 
[recipeid setTag:(int)[[array objectAtIndex:indexPath.row] valueForKey:@"RecID"]]; 



} 


-(IBAction)aMethod:(UIButton *)sender 
{ 

[[NSUserDefaults standardUserDefaults] setObject:sender forKey:[NSNumber numberWithInt:(@"RecipeIdsession",sender.tag)]]; 

[[NSUserDefaults standardUserDefaults] synchronize]; 
[self performSegueWithIdentifier:@"recipedetail" sender:nil]; 
} 
+0

вы можете идти вперед , это правильный путь, не беспокойтесь. –

+0

Но когда я нажимаю кнопку, симулятор падает –

ответ

1

Вы можете использовать CGPoint вашего Button, чтобы получить IndexPath как это.

-(void)aMethod:(UIButton *)sender{ 
    CGPoint center= sender.center; 
    CGPoint point = [sender.superview convertPoint:center toView:self.collectionView]; 
    NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:point]; 
    NSInteger recid = [[array objectAtIndex:indexPath.row] valueForKey:@"RecID"]; 
} 

Примечание: Удалите эту setTag линию от cellForItemAtIndexPath нет необходимости, чтобы установить метку.

0

Попробуйте добавить RecID вместо кнопки в NSUserDefaults.

для например:

[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:sender.tag] forKey:[NSNumber numberWithInt:(@"RecipeIdsession",sender.tag)]]; 
0

Есть много "Dont в" в вашем коде. Чтобы указать несколько,

  • В идеале вы должны создать пользовательскую ячейку и имеют IBOutlet для кнопки в этой пользовательской ячейке. (Я не уверен, действительно ли вам нужна кнопка в UITableCell, когда в самом представлении таблицы есть поведение обработки выбранных параметров.)
  • Добавить Цель должна быть никогда не в методе cellForRowAtIndexPath, так как этот метод можно вызвать несколько раз, а список целевых кнопок будет продолжать расти. Это нужно перенести в пользовательскую ячейку.
  • Наконец, использование тегов должно быть последним вариантом, даже если вы используете теги, вы должны избегать номеров тегов по крайней мере до 20, поскольку они могут использоваться внутри.

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

0

Ниже приведен фрагмент кода. Надеюсь, что это поможет вам.

// .h файл

@interface HomeCollectionCell : UICollectionViewCell 

@property (nonatomic,strong) IBOutlet UILabel *recipeid; 

@end 

// .m File

@implementation HomeCollectionCell 
@end 

// Ваш взгляд контроллер .m File ...

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
    HomeCollectionCell *cell = (HomeCollectionCell*)[collectionView dequeueReusableCellWithReuseIdentifier:@"HomeCollectionCell" forIndexPath:indexPath]; 
    cell.recipeid.tag = indexPath.row; 
    [recipeid addTarget:self action:@selector(aMethod:) forControlEvents:UIControlEventTouchUpInside]; 
    return cell; 
} 


-(IBAction)aMethod:(UIButton *)sender 
{ 
    UIButton *btn = (UIButton*)sender; 
    int rec_id = (int) [[array objectAtIndex:btn.tag] valueForKey:@"RecID"]; 
    <you code to use for rec_id> 
} 
Смежные вопросы