UIViewController parentViewController访问属性

Dav*_*ave 2 objective-c 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)

不工作.请帮忙.

Dav*_*ave 13

代表团是要走的路.我知道有些人可能正在寻找一个更简单的解决方案,但相信我,我已经尝试了其他人,没有什么比委托更好.所以任何人都有同样的问题,请继续阅读授权并一步一步地跟进.

在你的subviewcontroller.h中 - 声明一个协议并在其中声明委托mthods.

@protocol myDelegate
 -(void)clickedButton:(subviewcontroller *)subController;
@end
Run Code Online (Sandbox Code Playgroud)

在你的subviewcontroller.h中,在@interface中:

id<myDelegate> delegate;
@property (nonatomic, assign) id<myDelegate> delegate;    
NSString *data;
-(NSString *)getData;
Run Code Online (Sandbox Code Playgroud)

在你的subviewcontroller.m中,合成myDelegate.将以下代码添加到您要通知父视图控制器的位置,以便子视图完成它应该执行的任何操作:

 [delegate clickedButton:self];
Run Code Online (Sandbox Code Playgroud)

然后处理getData以返回要发送到parentviewcontroller的任何数据

在parentviewcontroller.h中,导入subviewcontroller.h并使用它的委托

 #import "subviewcontroller.h"
 @interface parentviewcontroller : VUIViewController <myDelegate>
 {}
Run Code Online (Sandbox Code Playgroud)

在parentviewcontroller.m中,实现委托方法

 - (void)clickedButton:(subviewcontroller *)subcontroller
 {
   NSString *myData = [subcontroller getData];
   [self dimissModalViewControllerAnimated:YES];
   [self reloadInputViews];
 }
Run Code Online (Sandbox Code Playgroud)

不要忘记内存管理!