Xcode - Segue - 将变量从Cell类传递给TableViewController类

时间:2015-10-06 20:28:47

标签: objective-c xcode variables segue

我努力将变量从一个类传递到另一个类。我已经完成了一些阅读,Segue方法似乎对我来说最合适,我只是无法让它发挥作用。一点帮助将不胜感激。

我有UITableViewTableViewController1),其中包含一个单元格(Cell1),其中包含一个标签(ReferenceLabel 1)。从数组中填充Table 1;每个单元格包含一个引用号(包含在ReferenceLabelLabel 1中)。所选单元格中的参考编号需要传递给TableViewController2

到目前为止我所拥有的:

TableViewController1.h

#import <UIKit/UIKit.h> 
#define kGETUrl @"http://localhost/RC.php"
@interface TableViewController : UITableViewController {    
NSMutableArray *json;    
}
@end

TableViewController1.m

#import "TableViewController1.h"
#import "TableViewController2.h"
#import "TableViewCell1.h"

@interface TableViewController1 ()

@end

@implementation TableViewController1

- (id)initWithStyle:(UITableViewStyle)style {

    self = [super initWithStyle:style];

    if (self) {

    }
    return self;
}

- (void) getData:(NSData *) data {

    json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

    [self.tableView reloadData];
}

- (void) start {

    NSURL *url = [NSURL URLWithString:kGETUrl];

    NSData *data = [NSData dataWithContentsOfURL:url];

    [self getData:data];

}

#pragma mark - View Lifecycle
- (void)viewDidLoad {
    [super viewDidLoad];


    [self start];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {


    // Return the number of rows in the section.
    return [json count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 static NSString *CellIdentifier = @"TableViewCell1";

 TableViewCell1 *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

 if (cell == nil) {
 cell = [[TableViewCell1 alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
 }
 NSDictionary *info = [json objectAtIndex:indexPath.row];

cell.ReferenceLabel1.text = [info objectForKey:@"id"];

    return cell;
 }

//I'm stuck with the following... any help appreciate... i cant figure how to send the selected row's ReferenceLabel.text value
    -(void)TableViewController1:(UITableView *)TableViewController1 didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [self performSegueWithIdentifier:@"TVC1RefNumberTVC2" sender:self];
    }


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    if ([[segue identifier] isEqualToString:@"TVC1RefNumberTVC2"])
    {
        NSIndexPath *ip = [self.tableView indexPathForSelectedRow];
                      DetailObject *detail = [self detailForIndexPath:path];
        [segue.destinationViewController setDetail:detail];
    }
}

@end

至于TableViewController2,我猜我只需要为TableViewController1发送的变量创建一个属性?

1 个答案:

答案 0 :(得分:1)

您是对的,您需要在第二个视图控制器中声明一个属性,以便您可以从第一个视图控制器的prepareForSegue方法访问它。

您可以在TableViewController2的头文件中声明一个如下所示的属性: @property (nonatomic, strong) DetailObject *detail;

然后在TableViewController1的prepareForSegue方法中的if子句中设置其detail属性,如下所示:

TableViewController2 *tableViewController2 = segue.destinationViewController tableViewController2.detail = detail;

您还可以在转换segue.destinationViewController之前添加一个额外的检查,方法是检查destinationVC的类是否与TableViewController2的类匹配。