我努力将变量从一个类传递到另一个类。我已经完成了一些阅读,Segue方法似乎对我来说最合适,我只是无法让它发挥作用。一点帮助将不胜感激。
我有UITableView
(TableViewController1
),其中包含一个单元格(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
发送的变量创建一个属性?
答案 0 :(得分:1)
您是对的,您需要在第二个视图控制器中声明一个属性,以便您可以从第一个视图控制器的prepareForSegue方法访问它。
您可以在TableViewController2的头文件中声明一个如下所示的属性:
@property (nonatomic, strong) DetailObject *detail;
然后在TableViewController1的prepareForSegue方法中的if子句中设置其detail属性,如下所示:
TableViewController2 *tableViewController2 = segue.destinationViewController
tableViewController2.detail = detail;
您还可以在转换segue.destinationViewController之前添加一个额外的检查,方法是检查destinationVC的类是否与TableViewController2的类匹配。