【问题标题】:Dismiss ViewController from TableViewController从 TableViewController 中关闭 ViewController
【发布时间】:2009-09-23 07:04:00
【问题描述】:

我已经展示了 viewController,它包含一个导航控制器,它的视图是从另一个 nib 加载的,其中包含 UITableView。我想从 UITableViewController 中取消呈现的 viewController。我已经尝试了 self.parentViewController 和 self.navigationController 和 self.navigationController.parentViewController 的所有组合,但我仍然无法将其关闭。如何以及最好的方法是什么?

【问题讨论】:

    标签: iphone uiviewcontroller uitableview


    【解决方案1】:

    我从来没有让self.navigationController.parentViewController 像宣传的那样工作,但这确实对我有用:

    NSArray *viewControllerArray = [self.navigationController viewControllers];
    int parentViewControllerIndex = [viewControllerArray count] - 2;
    [[viewControllerArray objectAtIndex:parentViewControllerIndex] myParentViewMethod:arg1 withArg2:arg2 ...];
    

    【讨论】:

    • 我无法让它工作,我在数组中只有一个项目并且仍然没有关闭视图。这可能与我创建它的方式有关。我用 XIB 添加了一个新的 UIViewController 并为 UINavigationController 创建了一个插座,然后我将它连接起来。接下来我用 XIB 创建一个 UITableViewController。回到 UIViewController 的 XIB,我将其设置为加载新的 nib 并将类设置为 UITableViewController 的类。
    【解决方案2】:

    this 不起作用吗?

    [myViewController presentModalViewController:otherController animated:YES];
    // ...
    [myViewController dismissModalViewControllerAnimated:YES];
    

    【讨论】:

    • 我需要处理来自 UITableView 的数据,并在 UITableViewController 中执行此操作,我需要关闭 parentViewController,但这不起作用
    【解决方案3】:

    听起来你的等级制度有点让自己陷入困境,但没关系,我认为我们可以解决它。有两种“通常”的方法是:

    1. 从控制器A,呈现控制器B,从B做工作,从B解散,返回A
    2. 从控制器 A,呈现控制器 B,从 B 执行工作,通过委托协议向 A 提出事件,从 A 解除 B,将控制权返回给 A

    在您当前的情况下,这可能需要大量的重构,在这种情况下,将句柄作为属性公开给另一个控制器可能更容易,只需确保它是一个弱引用,如下所示:

    @interface ControllerB : UIViewController
    {
      ControllerA* controllerA;
    }
    
    @property (readwrite, nonatomic, assign) ControllerA* controllerA; // weak reference
    
    @end
    

    或者,无论你喜欢什么,关键是适当地确定变量的范围,以便在需要时可用。

    【讨论】:

      【解决方案4】:

      我刚刚结束了使用委托来解散父级。

      【讨论】:

        猜你喜欢
        • 2014-05-09
        • 2012-10-18
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        • 2016-06-19
        • 1970-01-01
        相关资源
        最近更新 更多