我知道这个问题已经被问过几次了,我确实阅读了有关该主题的现有文章,但是我仍然需要帮助。

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

ChildController *child =
 [[ChildController alloc] initWithNibName:@"ChildView" bundle:nil];
[self presentModalViewController:child animated:YES];
[child release];


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

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

ParentController *parent =
 (ParentController *)[self.navigationController parentViewController];
[parent.myTextField setText:selectedText];
[self dismissModalViewControllerAnimated:YES];


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

我试过了

[parent reloadInputViews];


不起作用。请帮忙。

最佳答案

授权是要走的路。我知道有些人可能正在寻找一个更简单的解决方案,但是相信我我已经尝试了其他人,没有什么比授权更好。因此,任何有相同问题的人,请继续阅读委派并逐步遵循。

在您的subviewcontroller.h中-声明协议并在其中声明委托方法。

@protocol myDelegate
 -(void)clickedButton:(subviewcontroller *)subController;
@end


在subviewcontroller.h中的@interface中:

id<myDelegate> delegate;
@property (nonatomic, assign) id<myDelegate> delegate;
NSString *data;
-(NSString *)getData;


在您的subviewcontroller.m中,合成myDelegate。将以下代码添加到要通知您的parentviewcontroller子视图已完成其应做的工作的位置:

 [delegate clickedButton:self];


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

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

 #import "subviewcontroller.h"
 @interface parentviewcontroller : VUIViewController <myDelegate>
 {}


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

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


不要忘记内存管理!

关于objective-c - UIViewController parentViewController访问属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2412688/

10-11 00:32