标签: parentviewcontroller

将子视图控制器的视图添加到父视图控制器的子视图

我想添加一个tableViewController作为containerViewController的子视图控制器(如下所示).根据Apple的View Controller Programming Guide,我可以通过我的containerViewController中的以下代码行实现这一点:

   [self addChildViewController:tableViewController];
   [self.view addSubview:tableViewController.view];
   [tableViewController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

事实上,这很好.现在的问题是我不想将tableViewController的视图添加为containerViewController的根视图的子视图.相反,我想将它添加为containerView的子视图(参见图像),它本身是containerViewController的根视图的子视图.所以我改变了上面的代码如下:

   [self addChildViewController:tableViewController];
   [self.contentView addSubview:tableViewController.view];
   [tableViewController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

现在,当我启动应用程序时,它立即崩溃并出现此错误:

由于未捕获的异常'UIViewControllerHierarchyInconsistency'而终止应用程序,原因:'子视图控制器:应该有父视图控制器:但实际的父级是:'

这里有什么问题?是不是可以将childViewController的视图添加到其containerViewController 的特定视图中?或者如何在视图控制器层次结构中没有错误的情况下实现此目的?

containerViewController

parentviewcontroller addsubview ios childviewcontroller container-view

29
推荐指数
1
解决办法
6万
查看次数

如何在UIViewController中设置parentViewController?

UIViewController的parentViewController属性是readonly,但我正在嵌套自定义视图控制器并希望使用此属性.

但是,由于它是只读的,我发现没有其他的方法来设置该属性,我quesion是:如何我设置呢?

显然,UINavigationController可以在-pushViewController中以某种方式设置属性,因此-presentModalViewController也是如此,所以它必须是可能的.

我知道我可以添加自己的UIViewController属性,但我确信parentViewController原则上是正确的属性.

iphone cocoa-touch hierarchy uiviewcontroller parentviewcontroller

14
推荐指数
3
解决办法
2万
查看次数

容器视图控制器 - 通知操作的父级

假设我有一个自定义容器视图控制器(MainViewController),我在这里执行以下操作:

- (void)viewDidLoad
{
    [super viewDidLoad];        

    HomeViewController *homeVC = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
    [self addChildViewController:homeVC];
    [self.view addSubview:homeVC.view];

}
Run Code Online (Sandbox Code Playgroud)

HomeViewController将有一个按钮,例如"go",按下时需要前进到下一个视图控制器.所以我需要通知MainViewController这个动作.做这个的最好方式是什么?

我正在使用自定义容器,因为我需要在视图控制器之间进行自定义转换.当按下"go"时,HomeViewController上的一些视图将动画,而新视图控制器的视图将动画到位.

显然,我可以给HomeViewController一个MainViewController类型的属性,并以这种方式进行调用,但我希望有一个更简洁的方法与容器视图控制器API.

uiviewcontroller parentviewcontroller ios childviewcontroller

8
推荐指数
3
解决办法
7853
查看次数

如何在ios中检测子视图控制器中的触摸事件

我已经为iPhone创建了一个侧视图菜单,我已经使用集装箱船概念在父视图控制器中添加子视图控制器.当用户点击导航栏上的菜单按钮时,我只需更改子视图控制器的框架,使其像一个显示菜单一样设置动画,以便子视图控制器将其框架的一半剪裁到右侧.

现在我的问题是每当用户点击子视图控制器的任何部分时我只想通知其父视图控制器触发事件​​已在其子视图控制器上触发,以便父视图控制器可以重置子视图控制器的帧以使其动画化喜欢关闭半显示菜单.

我使用了tap手势并将其添加到子视图控制器子视图的每个子视图中.因此,在任何子视图上点击手势都会通知父视图控制器有关触摸事件的信息.

触摸事件适用于子视图控制器的主视图,但任何按钮上的任何触摸都无法识别TAP事件.

我不知道我在哪里误会.请帮助我如何通知父视图控制器其子视图控制器中的任何触摸.提前致谢.

iphone parentviewcontroller touch-event ios childviewcontroller

7
推荐指数
1
解决办法
7522
查看次数

superview和parentviewcontroller在添加子视图后为零

我想我缺少一些基本的东西,所以我想向社区寻求帮助.我正在构建一个基于iPhone实用程序基本应用程序的应用程序.我的MainView和FlipsideView共享一些元素,所以我为这些片段创建了单独的ViewControllers和nib文件.为了做到这一点,我做了以下工作:1.创建了一个名为searchDateViewController的viewcontroller,它是searchDateView.xib的文件所有者2. searchDateView.xib基本上是一个内部有UILabel的UIView,视图连接正确3.里面MainViewController.m和FlipsideViewController.m我将子视图添加为folllows:

- (void)loadView{
    [super loadView];
    searchDateViewController = [[SearchDateViewController alloc] initWithNibName:@"SearchDateView" bundle:nil];
    [[searchDateViewController view] setFrame:[searchDateView frame]];
    [[self view] addSubview:[searchDateViewController view]];

...
}
Run Code Online (Sandbox Code Playgroud)

一切都显示和工作得很好.基本上取决于每个主视图和翻转视图中发生的动作,笔尖的UILabel被更改.但是,如果从MainView或FlipsideView加载searchDateViewController,我想做一些稍微不同的事情.但是,我似乎无法弄清楚哪个ViewController正在添加searchDateViewController子视图.

在searchDateViewController中,我试过:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"superview %@", self.view.superview);
    NSLog(@"parentviewcontroller %@", self.parentViewController);
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都没有.

所以我的问题是 - 我能找出哪个ViewController正在添加searchDateViewController一个子视图?如果是这样的话?或者,如果我的逻辑完全搞砸了,我该怎么做呢?

谢谢!

iphone cocoa-touch parentviewcontroller superview

5
推荐指数
1
解决办法
6899
查看次数

从containerView,如何访问包含Swift容器的视图控制器?

我有4个带有Headerpart的视图,我将其外包到一个containerview中,在所有4个视图上都有相同的字段和布局.在我的容器里面,我有很多标签,我知道想要填充数据.我现在的问题是,我必须根据用户选择的游戏填写标签.游戏是我的玩家类中的枚举.我不知道如何从容器视图中获取该信息并相应地设置游戏变量以执行我的代码.有没有一个解决方案从我的容器视图中的容器视图中获取storyboardid?


切换游戏

case.Coinflip:

Player1PointsLabel.Text =(player1.points.coinflip)

case.RollingDices

Player1PointsLabel.Text =(player1.points.rollingdices)


也许我做错了什么,设计明智,我不是那么有经验,所以我也愿意接受建议.

最好的祝福

parentviewcontroller ios uicontainerview swift

5
推荐指数
2
解决办法
3156
查看次数

UIViewController parentViewController访问属性

我知道这个问题已被多次询问,我确实阅读了有关此主题的现有帖子,但我仍然需要帮助.

我有2个UIViewControllers- 父母和孩子.我UIViewController使用presentModalViewController如下显示孩子:

ChildController *child = 
 [[ChildController alloc] initWithNibName:@"ChildView" bundle:nil];
[self presentModalViewController:child animated:YES];
[child release];
Run Code Online (Sandbox Code Playgroud)

孩子的观点有一个UIPickerView.当用户从中选择一个项目UIPickerView并单击完成时,我必须关闭模态视图并UITextField在父视图中的a上显示所选项目.

在孩子的按钮单击中delegate,我执行以下操作:

ParentController *parent = 
 (ParentController *)[self.navigationController parentViewController];
[parent.myTextField setText:selectedText];
[self dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

一切正常,没有错误.但我不知道如何加载父视图,以便它显示更新UITextField.

我试过了

[parent reloadInputViews];
Run Code Online (Sandbox Code Playgroud)

不工作.请帮忙.

objective-c uiviewcontroller parentviewcontroller

2
推荐指数
1
解决办法
1万
查看次数

iPad:呈现模态视图,我的parentViewController现在为零?

我有几个模态视图一直工作"很好",现在停止返回到父视图控制器,"代码没有改变." - 经典问题描述.

我调试了模态视图解除,父视图控制器是nil,这解释了问题,但不是原因.我确实将我的SDK从4.1.2升级到4.2,所以我可以开始使用iOS 5.我怀疑新的内存管理ARC和我的自动释放风格与保留/释放.

以下是我的rootview控制器到AboutViewController的代码:

- (IBAction)doInfo:(id)sender {
    NSLog(@"%s", __FUNCTION__);
    AboutViewController *aboutViewController = [[[AboutViewController alloc] initWithNibName:@"AboutViewController" bundle:[NSBundle mainBundle]] autorelease];
    if (aboutViewController) {
        aboutViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        aboutViewController.hidesBottomBarWhenPushed = YES;
        self.navigationController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        self.navigationController.navigationBarHidden = YES;
        [self presentModalViewController:aboutViewController animated:YES];
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是在按下"完成"按钮后将AboutViewController中的消除回到其父节点.

- (IBAction)doDone:(id)sender {
    NSLog(@"%s", __FUNCTION__);
    [[self parentViewController] dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

好的......我修改如下修改.现在的问题是为什么以前这项工作?

- (IBAction)doDone:(id)sender {
    NSLog(@"%s", __FUNCTION__);
    [self dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

parentviewcontroller ipad presentmodalviewcontroller

2
推荐指数
1
解决办法
1340
查看次数

从子视图控制器传回数据

我是初学者,我有一个项目,我需要从childviewcontroller传回数据.具体来说,我的容器中有一个选择器视图,我希望能够使用它来选择一个选项(比如简化一种颜色,从十种颜色的数组中选择).然后我希望能够在我的父视图控制器中访问所选颜色并使用它做一些事情.我已经研究了这几天了,最接近我正在寻找的答案我在SO的相关问题中找到了这里它是:

"关于将值传递给containerView控制器,您可以在ChildViewController中创建一个您想要传递的值的属性.然后在您的ParentViewController中执行以下操作:

self.ChildViewController.yourProperty = yourValue
Run Code Online (Sandbox Code Playgroud)

相反可以通过4种方式完成:

您可以创建委托协议以在控制器之间传递数据.

您可以在ChildViewController中发布通知,并将父控制器添加为观察者.

你可以使用KVO.

最简单的方法是,你可以在你的parentviewController中创建一个属性,并像下面那样访问它:"

((YourParentViewControllerClassType *)self.parentViewController).yourParentProperty = TheValueYouWant;
Run Code Online (Sandbox Code Playgroud)

现在,我想首先尝试第四个选项,因为委托,kvo等是我读过但尚未准备解决的选项.我需要帮助的是最后一个选项.

假设我的子视图控制器中有一个属性,我存储所选的颜色.就像是:

@interface ViewController ()

@property NSString *ChosenColorInChildVC;

@end
Run Code Online (Sandbox Code Playgroud)

然后,后来:

self.ChosenColorInChildVC = [self pickerView:myPickerView titleForRow:[myPickerView selectedRowInComponent:1] forComponent:1]];
Run Code Online (Sandbox Code Playgroud)

我将如何使用建议传递该值:

((YourParentViewControllerClassType *)self.parentViewController).yourParentProperty = TheValueYouWant;
Run Code Online (Sandbox Code Playgroud)

有人可以为我进一步愚蠢吗?谢谢

objective-c parentviewcontroller childviewcontroller uicontainerview

2
推荐指数
1
解决办法
1554
查看次数

在没有警告消息的情况下在父控制器上调用方法

我有一个前视图和翻转视图很像实用天气应用程序.

为了避免处理协议的复杂性......在我的flipView上,我需要调用一些驻留在我的前视图中的代码.这有效...但在编译期间会生成警告.

[self.parentViewController returningFromGetStringView];
Run Code Online (Sandbox Code Playgroud)

警告(显示两次):

'UIViewController' may not respond to '-returningFromGetStringView'
'UIViewController' may not respond to '-returningFromGetStringView'
Run Code Online (Sandbox Code Playgroud)

该方法肯定存在...并执行良好...但为什么警告???

iphone objective-c compiler-warnings uiviewcontroller parentviewcontroller

1
推荐指数
1
解决办法
1935
查看次数