0

在我的 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 这几行后它返回“(null)”。视图已更改,但未设置类型。

我无法弄清楚我做错了什么?有人对此有解决方案或可以向我指出我们正在解释的事情吗?

因为我尝试搜索答案,但找不到任何与我的问题相同的内容,或者我使用了错误的搜索词..

4

5 回答 5

1

这个是来做什么的?

UINavigationController * navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];

为什么要在导航控制器中推送导航控制器?

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

detailController未使用或显示。

试试这个:

[self.navigationController pushViewController:detailController animated:YES];
于 2013-11-06T12:28:11.130 回答
1

看最后一行——你是在告诉导航控制器推动自己!

于 2013-11-06T12:28:43.300 回答
1

在您的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。按照这些步骤,您的问题将得到解决。

或者你可以从你的 ListViewController 给 DetailViewController 并使用

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *path = [self.tableView indexPathForSelectedRow]; //create tableview outlet
    [segue.destinationViewController setType:@"video"];
}
于 2013-11-06T12:36:32.350 回答
0

导航控制器和 alloc-init 方法是否都实例化了保存视图控制器?

如果是,试试这个

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController * detailController = [[DetailViewController alloc] init];

detailController.type = @"video";

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

[self.navigationController pushViewController:detailController animated:YES];
}
于 2013-11-06T12:35:51.577 回答
0

应该是这样的

- (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];
}
于 2013-11-06T12:31:21.380 回答