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)
不要忘记内存管理!
| 归档时间: |
|
| 查看次数: |
14567 次 |
| 最近记录: |