[英]How to pass value from TableView to Detail View Controller?
[英]iOS 6 pass data from TableView to Detail View
我有一个表视图,其中包含一些行,每行都有其“详细信息披露”按钮。 我希望当用户点击该按钮时,出现另一个表视图(由情节提要定制)并显示一些相关数据。
从TableViewController.m
-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
DetailViewController *detailViewController = [[detailViewController alloc] init];
//creating a parse object
PFObject *checkin = [_dataSourceArray objectAtIndex:indexPath.row];
//getting data i want
NSString *trainNumb = [checkin objectForKey:@"trainNumber"];
//passing the data
detailViewController.trainNumber = trainNumb;
}
从DetailTableViewController.m
- (void)viewDidLoad {
[_trainNumberLabel setText:_trainNumber];
}
问题在于,在DetailTableView中, NSString
结果为null。
我在这里想念的是什么? 谢谢!
如果此代码实际上可以编译,则可能是您的问题:
DetailViewController *detailViewController = [[detailViewController alloc] init];
它应该是:
DetailViewController *detailViewController = [[DetailViewController alloc] init];
但是,您不应该首先alloc/initing
视图控制器。 在Interface Builder中自定义视图控制器时,如果要进行这些自定义,必须像这样实例化它:
[self.storyboard instantiateViewControllerWithIdentifier:@"MyStoryboardIdentifier"]`
并且您必须将控制器的故事板ID设置为“ MyStoryboardIdentifier”或您要使用的任何标识符。
而且,正如您在注释中指出的那样,您还遇到了计时问题:在设置列车编号之前,详细信息控制器的viewDidLoad
运行。 更好的方法是确保其工作与序列无关:
- (void)updateTrainNumberLabel
{
self.trainNumberLabel.text = self.trainNumber;
}
- (void)setTrainNumber:(NSString *)trainNumber
{
_trainNumber = trainNumber;
[self updateTrainNumberLabel];
}
- (void)viewDidLoad
{
...
[self updateTrainNumberLabel];
}
换句话说,您可以在单独的方法(在本例中为updateTrainNumberLabel
配置标签,当发生可能影响标签的任何事情(例如,视图加载或更改编号)时,您将调用该方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.