我知道这个问题已经被问了好几次了,我确实阅读了关于这个主题的现有帖子,但我仍然需要帮助。
我有两个UIViewControllers -父母和孩子。我使用presentModalViewController显示子UIViewController,如下所示:
ChildController *child =
[[ChildController alloc] initWithNibName:@"ChildView" bundle:nil];
[self presentModalViewController:child animated:YES];
[child release];子视图有一个UIPickerView。当用户从UIPickerView中选择一项并单击done时,我必须关闭模式视图,并在父视图中的UITextField上显示所选的项。
在孩子的按钮点击delegate,我做了以下事情:
ParentController *parent =
(ParentController *)[self.navigationController parentViewController];
[parent.myTextField setText:selectedText];
[self dismissModalViewControllerAnimated:YES];一切工作正常,没有错误。但是我不知道如何加载父视图来显示更新后的UITextField。
我试过了
[parent reloadInputViews];不起作用。请帮帮忙。
发布于 2010-03-18 02:37:10
委派是大势所趋。我知道有些人可能在寻找更简单的解决方案,但相信我,我已经尝试过其他人,没有什么比委派更有效了。因此,任何有同样问题的人,都可以去阅读委派,并一步一步地遵循它。
在你的子视图中,Controler.h-声明一个协议,并在其中声明委托方法。
@protocol myDelegate
-(void)clickedButton:(subviewcontroller *)subController;
@end在您的subviewControler.h中的@interface中:
id<myDelegate> delegate;
@property (nonatomic, assign) id<myDelegate> delegate;
NSString *data;
-(NSString *)getData;在您的subviewControler.m中,合成myDelegate。将下面的代码添加到您想要通知parentviewcontroller的位置,通知子视图已经完成了它应该做的任何事情:
[delegate clickedButton:self];然后处理getData以返回您想要发送给parentviewcontroller的任何数据
在您的parentviewControler.h中,导入subviewControler.h并使用它的委托
#import "subviewcontroller.h"
@interface parentviewcontroller : VUIViewController <myDelegate>
{}在您的parentviewControler.m中,实现委托方法
- (void)clickedButton:(subviewcontroller *)subcontroller
{
NSString *myData = [subcontroller getData];
[self dimissModalViewControllerAnimated:YES];
[self reloadInputViews];
}别忘了内存管理!
发布于 2010-03-10 06:51:05
如果在显示模式视图的过程中出现内存不足的警告,则会卸载父视图。则在重新加载视图之前,parent.myTextField不再引用右侧的文本字段。只需调用parent.view;,就可以强制重新加载视图
但是,更好的做法可能是让父视图具有一个可由子视图设置的字符串属性。然后,当父视图重新出现时,将该数据放入文本字段中,例如在viewWillAppear:中。当父视图最初出现时,您也会希望将该值设置为某个默认值。
发布于 2010-11-26 04:28:52
-(空) viewWillAppear:(BOOL) animated也不会为我调用,确切地说,当它是一个模式视图控制器时。不知道为什么。在这个应用程序的任何地方都没有被错误地覆盖,同样的问题也发生在我正在开发的其他两个应用程序上。我真的不认为它管用。
我以前使用过委托方法,但我认为下面的方法也很好。
我通过向UIViewController添加一个私有类别来解决这个问题,如下所示:
.h文件:
@interface UIViewController(Extras)
// returns true if this view was presented via presentModalViewController:animated:, false otherwise.
@property(readonly) BOOL isModal;
// Just like the regular dismissModalViewController, but actually calls viewWillAppear: on the parent, which hasn't been working for me, ever, for modal dialogs.
- (void)dismissModal: (BOOL) animated;
@end和.m文件:
@implementation UIView(Extras)
-(BOOL) isModal
{
return self == self.parentViewController.modalViewController;
}
- (void)dismissModal: (BOOL) animated
{
[self.parentViewController viewWillAppear: animated];
[self dismissModalViewControllerAnimated: animated];
}
@end当我想关闭对话框时,我现在可以像这样调用它:
// If presented as a modal view, dismiss yourself.
if(self.isModal)
[self dismissModal: YES];现在可以正确调用viewWillAppear了。
是的,我捐赠了一个额外的“isModal”属性,这样模式视图就可以知道它是如何呈现的,并适当地消除它自己。
https://stackoverflow.com/questions/2412688
复制相似问题