所以我有两个视图A和B. A是配置文件视图,B是登录视图。使用
在ViewDidLoad方法中加载B.LoginViewController *lvc = [[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:[NSBundle mainBundle]]; //make new instance of LoginViewController
[self presentModalViewController:lvc animated:NO]; //present the LoginViewController
[lvc release];
在登录视图中,如果登录成功,则删除视图
[self dismissModalViewControllerAnimated:YES];
在登录视图中,它会下载一些我想在配置文件视图中显示的数据。我将如何将数据发送到配置文件视图并将其显示在xib中。我相信配置文件视图已经显示但只是隐藏了。
答案 0 :(得分:1)
在下载数据而不是ViewDidLoad后加载视图A.
答案 1 :(得分:1)
当您点击登录按钮然后下载数据并显示它。 如果你的viewWillAppear没有调用,那么创建nsnotification center对象并在你想要调用你的视图时发布它willAppear方法。然后删除这个通知。
答案 2 :(得分:1)
这是一个基本的“两类沟通”问题。有很多方法可以做到这一点,但这里有三个。我只为代理编写了示例代码(因为我认为这可能是您情况下的最佳选择),但如果您想要通知或KVO的示例,请告诉我。
委派在A类中实现委托或回调方法。委托最适合小类层次结构。如果A类是唯一将加载B的类,A是唯一关心B中发生的事情的类,那么委托是移动数据的最简单方法。它实现起来很简单,理解起来很简单,并且类之间有明确的关系。
// Class A
- (void)displayLoginViewController {
LoginViewController *lvc = [[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:[NSBundle mainBundle]];
lvc.delegate = self;
[self presentModalViewController:lvc animated:NO]; //present the LoginViewController
[lvc release];
}
- (void)loginViewControllerWasSuccessfull:(LoginViewController *)loginViewController {
// Do whatever you need to do here
[self dismissModalViewControllerAnimated:YES];
}
在登录视图控制器中,在标题中执行以下操作:
@property (assign) NSObject delegate; // declared assign so you don't have circular references
......这在实施中:
- (void)didLogin {
[self.delegate loginViewControllerWasSuccessfull:self];
}
通知 A类将注册以侦听登录通知。 B类将发布登录通知。如果分发关注登录的类,通知最好。即有许多关心登录事件的类,他们可能不一定与正在执行登录的类有直接关系。
键值观察如果您不特别关心 login 事件,KVO最好,您关心数据的更改。您将拥有一些管理数据的类,如果您使用的是核心数据,则可能是NSManagedObject
。 A类将观察对其感兴趣的任何属性的更改。您的LoginViewController
将在完成数据下载后更新该数据类。将通知A类数据已更改。
无论您决定使用哪种解决方案,最终的选择都归结为“A级关心什么?”。 A类是否需要知道B级成功登录?使用委托。 A类是否需要知道某个地方,某些类登录?使用通知。 A类不关心登录,只需要知道数据是否已经改变?使用KVO。
答案 3 :(得分:0)
您可以将下载的数据存储在登录视图中的委托文件中。并且在viewWillAppear的配置文件视图方法中使用来自委托的数据....
答案 4 :(得分:0)
为此您必须创建变量并在.h和.m文件中设置其属性。然后您可以在登录屏幕中设置此变量值,它将合成到配置文件屏幕。
另一种方式 你必须在appDalegate中创建变量。 appDalegate值在登录屏幕中设置并在配置文件屏幕中使用此值
答案 5 :(得分:0)
如果我理解正确,你试图做的相当于Android的意图。因此,我建议使用iOS的NSNotificationCenter并发送带有相关数据的NSNotifications。