2015-10-06 20 views
0

我正努力將變量從一個類傳遞到另一個類。我已經做了一些閱讀,Segue方法似乎對我來說最合適,但我無法讓它工作。一點幫助將不勝感激。Xcode - Segue - 將變量從Cell類傳遞給TableViewController類

我有一個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,我猜我只需要爲變量創建我的屬性m從TableViewController1發送?

回答

1

您說得對,您需要在第二個視圖控制器中聲明一個屬性,以便您可以從您的第一個視圖控制器的prepareForSegue方法中訪問它。

可以申報TableViewController2的頭文件,看起來像這樣的屬性: @property (nonatomic, strong) DetailObject *detail;

然後你這樣的TableViewController1的prepareForSegue方法中的if語句中設置其詳細屬性:

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

您還可以在投射segue.destinationViewController之前添加額外的檢查,方法是檢查destinationVC的類是否與TableViewController2的類匹配。