繁体   English   中英

iOS 6将数据从TableView传递到详细信息视图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM