自定义单元格中的选定行不会将完整数据从segue传递到另一个视图控制器

时间:2015-07-02 05:33:27

标签: ios objective-c

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
            self.data= [self.nameList objectAtIndex:indexPath.row];
            self.data= [self.rollList objectAtIndex:indexPath.row];
            [self performSegueWithIdentifier:@"DetailVC" sender:self];
        }

我在自定义单元格中显示了学生的姓名和代码。现在,当我选择一行时,我想将这些数据传递给另一个UIViewController并显示在标签中。因为我有一个名为'Name'的NSObject类型文件,我有一个名为'data'的变量,它的类型为'Name'。现在,这是我didSelectRowAtIndexPath中的代码,nameListrollList重叠,存储在同一个变量self.data中。如果删除了rollList行,那么效果很好。但是当我在rollList中存储self.data时,它会与其他人重叠。

其中,self.nameListNSMutableArray类型的变量,其中包含学生姓名,类似地,self.rollList包含学生名单。

以下是从segue传递数据的代码。这里DetailVCdestinationViewControllervc.data是'Name'类型的变量,self.data也是同一类型的变量。

     -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
            if([segue.identifier isEqualToString:@"DetailVC"]){
                DetailVC *vc = (DetailVC *) segue.destinationViewController;
                vc.data = self.data;
            }
        }

2 个答案:

答案 0 :(得分:3)

重叠是至关重要的事情。

根据您的情况,您的NSObject type file (Name) you have to add two variable

NSNumber *rollNo;
NSString *name;

之后

- 更新 -

@interface TableVC : UIViewController {   
    Name *data;
}
-(void)viewDidLoad {
      data = [[Name alloc] init]
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
            self.data.name = [self.nameList objectAtIndex:indexPath.row];
            self.data.rollNo = [self.rollList objectAtIndex:indexPath.row];
            [self performSegueWithIdentifier:@"DetailVC" sender:self];
}

然后

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
            if([segue.identifier isEqualToString:@"DetailVC"]){
                DetailVC *vc = (DetailVC *) segue.destinationViewController;
                vc.data = self.data;
            }
}

------详情VC ---

@property (nonatomic, strong) Name *data;


-(void)viewDidLoad {
      self.labelRollNo.text = self.data.rollNo;
      self.labelName.text = self.data.name;
}

答案 1 :(得分:0)

试试这种方式

@interface ViewController ()
{
    NSString *name;
    NSString *roll;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        name= [self.nameList objectAtIndex:indexPath.row];
        roll= [self.rollList objectAtIndex:indexPath.row];
        [self performSegueWithIdentifier:@"DetailVC" sender:self];
 }

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
       if([segue.identifier isEqualToString:@"DetailVC"]){
            DetailVC *vc = (DetailVC *) segue.destinationViewController; 
            vc.name = name;
            vc.roll = roll;
        }
 }

在DetailVC中创建两个NSString名称和卷属性

DetailVC.h

@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *roll;