代码之家  ›  专栏  ›  技术社区  ›  timpone

使用prepareForSegue从标签获取标签/id

  •  0
  • timpone  · 技术社区  · 11 年前

    我有一组UILabel,希望将所选项目的id放入标记中。像这样:

    UILabel *miII = [[UILabel alloc] initWithFrame:CGRectMake(530, 0, 25, 25)];
    miII.tag=item.id;
    

    我可以在以下位置设置destinationViewController的itemId属性。我遇到的问题是如何从UILabel访问标记?或者有更好的方法吗?我在评论中包含了我的经验,并且没有使用UITableView。

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        NSLog(@"prepareForSegue: %@", segue.identifier);
        ItemDetailViewController *myVC = [segue destinationViewController];
    
        //[myVC setItemId:12]; //  <-- hard-coding this works
        [myVC setItemId:sender.view.tag];   // this doesn't work
    
    }
    
    - (void)tapRecognized:(UIGestureRecognizer *)sender
    {
        NSLog(@"that tap was recognized with %d", sender.view.tag); // <-- this works
        [self performSegueWithIdentifier: @"ItemSegue" sender: self];
    
    
    }
    

    线等回答

    1 回复  |  直到 11 年前
        1
  •  0
  •   timpone    11 年前

    答案相当简单,但基于其他q和a的答案,答案有点晦涩难懂。我执行了以下操作:

    @interface ListViewController ()
    {
    @private
    
    int _itemId;
    }
    
    .....
    
    
    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        // NSLog(@"prepareForSegue: %@", segue.identifier);
        // NSLog(@"prepareForSegue: %@", sender);
    
        ItemDetailViewController *myVC = [segue destinationViewController];
        [myVC setItemId:_itemId];  // obviously need property for itemId on ItemDetailViewController
    
    }
    
    - (void)tapRecognized:(id)sender
    {
        NSLog(@"that tap was recognized with %d", [(UIGestureRecognizer *)sender view].tag);
        _itemId=[(UIGestureRecognizer *)sender view].tag;
    

    在ItemDetailiViewController.h中。。。

    @interface ItemDetailViewController : UIViewController
    
    @property (nonatomic) int itemId;