在我的DetailViewController.h中,我声明了属性*类型,如下所示:

@interface DetailViewController : UIViewController
    @property (strong, nonatomic) NSString *type;
@end


然后我得到一个ListViewController,它是一个包含TableView的UIViewController。
ListViewController.h看起来像这样:

@interface ListViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@end


在我的ListViewController.m中,我想在切换视图后立即更改*类型的值(视图切换工作正常)。

我通过添加以下内容来做到这一点:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UINavigationController * navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];
    DetailViewController * detailController = [[DetailViewController alloc] init];

    detailController.type = @"video";

    NSLog(@"Type: %@", detailController.type);

    [self.navigationController pushViewController:navigationController animated:YES];
}


当我在该块/函数的第二行放置一个断点时,我会得到*类型的detailController。
当我NSLog这几行后,它返回“(空)”。
视图已更改,但未设置类型。

我不知道自己在做什么错?
有人对此有解决方案或可以指出我所要解决的问题吗?

因为我尝试搜索答案,但是找不到与我的问题相当的东西,或者我使用了错误的搜索词。

最佳答案

在您的didSelectRowAtIndexPath:方法中,更改以下几行`

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    DetailViewController * detailController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];;

    detailController.type = @"video";

    NSLog(@"Type: %@", detailController.type);

    [self.navigationController pushViewController: detailController animated:YES];
}`


在情节提要中选择DetailViewController并将情节提要ID指定为“ DetailController”。确保您的ListViewController嵌入在UINavigationController中,可以通过选择ListViewController并转到editor->Embed in->Navigation Controller来实现。请按照下列步骤,您的问题将得到解决。

或者,您可以将Segue从ListViewController传递给DetailViewController并使用

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *path = [self.tableView indexPathForSelectedRow]; //create tableview outlet
    [segue.destinationViewController setType:@"video"];
}

10-08 17:06