我如何从UICollectionView传递我的id

时间:2016-08-25 05:41:31

标签: ios objective-c uicollectionview

当我点击UICollectionView内的按钮时,我想将我的食谱ID存储为会话ID。任何人都可以给我解决方案。我将标签值设置为我的食谱ID,但我不确定这是否正确。

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

4 个答案:

答案 0 :(得分:1)

您可以使用CGPoint的{​​{1}}来获取此类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行,无需设置标记。

答案 1 :(得分:0)

请尝试在NSUserDefaults中添加RecID而不是按钮。

例如:

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

答案 2 :(得分:0)

有许多"不要""在你的代码中。 要指出一些,

  • 理想情况下,您应该创建一个自定义单元格,并为该自定义单元格中的Button设置一个IBOutlet。 (当tableview本身具有处理选择的行为时,我不确定你是否真的需要UITableCell上的按钮。)
  • 添加目标应该永远不会在cellForRowAtIndexPath方法中,因为此方法可以被多次调用,并且您的按钮目标列表将继续增加。这应该移到您的自定义单元格。
  • 最后使用标签应该是最后一个选项,即使您使用的是标签,也应该至少避免使用标签号码,因为它们可能会在内部使用。

您应该开始学习使用UICollectionView的表单基础知识。您可以参考此link几乎可以实现您的案例,但在UITableView中,大多数步骤都是相似的。

答案 3 :(得分:0)

您可以在下面找到以下代码段。希望这会对你有所帮助。

// .h文件

@interface HomeCollectionCell : UICollectionViewCell

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

@end

// .m文件

@implementation HomeCollectionCell
@end

//您的View控制器.m文件     ...

- (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>
 }