【问题标题】:Push View Controller from External Delegate从外部委托推送视图控制器
【发布时间】:2013-06-04 20:19:13
【问题描述】:

我有两节课; MasterView 是一个 UIViewController,它显示我的 TableView 和 MyClass,由于各种原因,它充当 TableView 的委托和数据源。选择单元格时,我需要推送视图控制器 (DetailView)。如何从 MyClass 推送视图?这就是我真正拥有的一切:

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

if (!detailViewController) {
    detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
}

//Somehow push detailViewController
}

【问题讨论】:

  • 如何在哪里创建 MyClass 的实例?还有,它是 NSObject 的子类吗?
  • 我正在调用 MyClass 中的方法。将其设置为 NSObject 的子类。
  • 我问的问题是你如何以及在哪里创建你的 MyClass 实例? MasterView 会这样做吗?您需要以某种方式获取对导航控制器的引用,所以我试图弄清楚您的两个类是如何相互连接的。

标签: ios objective-c cocoa-touch


【解决方案1】:

我的解决方案是在 UITableViewDelegate 上创建一个属性作为 UINavigationController,并在创建 tableViewDelegate 时简单地设置它。看起来还可以吗?

【讨论】:

    【解决方案2】:

    有几种方法可以做到这一点。我假设您已经将 Masterview 嵌入到 UINavigationController 中,对吧?

    您可以通过将引用传递给您的Masteriew 来访问它,然后使用:

    [masterView.navigationController pushViewController:detailViewController animated:YES];
    

    如果您的 Masterview 与您的 App 的 Delegate 有某种关联并且您想访问它,您也可以使用以下行:

    MainClass *appDelegate = (MainClass *)[[UIApplication sharedApplication] delegate];
    

    【讨论】:

    • 我实际上最初尝试了您的第一个建议,但它失败了。能否请您更详细地解释第二部分?
    • 第一个建议是基于将您的主视图嵌入到导航控制器中。如果你使用 Storyboards,你可以选择 MasterViewController,然后从菜单栏中选择“Editor”->“Embed In”->“NavigationController”。从现在开始,我的第一个解决方案应该可以工作。第二个提示可以帮助您访问您的主视图。这是为了以防你现在有一个直接引用你的 mv 并且你 AppDelegate 有,你可以像这样访问它:appDelegate.masterview。
    • 好的,谢谢,我对MainClass 是什么感到困惑。我只是用AppDelegate 替换它,然后调用appDelegate.navigation 控制器。
    • 很高兴它成功了!如果它是一个“真正的”项目,而不仅仅是您在那里进行的测试,请尝试牢记模型-视图-控制器模式。如果您将 AppDelegate 用作一个 ViewController,那会很痛苦。相信我,我去过那里。 ;)
    【解决方案3】:

    如果您使用的是导航控制器,请使用以下方法:

    [self.navigationController pushViewController:(UIViewController *)viewController animated:(BOOL)animated];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-22
      相关资源
      最近更新 更多