重新加载View iPhone

时间:2011-08-29 10:03:57

标签: iphone objective-c ios cocoa-touch

所以我有两个视图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中。我相信配置文件视图已经显示但只是隐藏了。

6 个答案:

答案 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。