从TableViewController中解除ViewController

时间:2009-09-23 07:04:01

标签: iphone uiviewcontroller uitableview

我提供了一个viewController,它包含一个导航控制器,其视图是从另一个带有UITableView的笔尖加载的。我想从UITableViewController中忽略那个呈现的viewController。我已经尝试了self.parentViewController和self.navigationController以及self.navigationController.parentViewController的每个组合,但我仍然无法解雇它。如何以及被解雇的最佳方式是什么?

4 个答案:

答案 0 :(得分:0)

我从未让self.navigationController.parentViewController按照宣传的方式工作,但这对我有用:

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

答案 1 :(得分:0)

this无效吗?

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

答案 2 :(得分:0)

听起来你已经把自己画成了一个与你的等级有点相关的角落,但是我认为我们可以修复它。有两种“通常”的方法是:

  1. 从控制器A,现在的控制器B,从B工作,从B解雇,返回到A
  2. 从控制器A,现在的控制器B,从B做工作,通过委托协议将事件提升到A,从A解除B将控制返回到A
  3. 在你目前的情况下,这可能需要一个令人不舒服的重构,在这种情况下,将一个句柄作为属性暴露给另一个控制器可能更容易,只需确保它是一个弱引用,如下所示:

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

    或者无论如何,关键是要正确调整变量的范围,以便在需要时可以使用它。

答案 3 :(得分:0)

我最后使用委托解雇了父母。