Есть много вариантов, которые вы можете рассмотреть.
Этого легко достичь, используя делегат . Если вы хотите закрыть виртуальный канал, который вы представили модально, присвойте ему свойство delegate
. При необходимости делегату будет отправлено сообщение, позволяющее отклонить ВК. Хороший способ использовать делегат - написать собственный протокол.
Например:
// the delegate will conform to this protocol
@protocol SignInVCDelegate
// this method will be called when required
//
-(void)signInCompleted;
@end
Теперь приведите нужный объект в соответствие с этим протоколом, например, делегат приложения.
// .h
#import "SignInVCDelegate.h"
@interface YourAppDelegate : NSObject <..., SignInDelegate> {
...
SignInVC *signIn;
...
}
-(void)signInCompleted;
@end
Реализация выглядит следующим образом:
// .m
...
-(void)signInCompleted {
...
[signIn.view removeFromSuperview];
}
-(BOOL)applicationDidFinishLaunching {
if(!logged) {
...
[signIn setDelegate:self];
[self.tabBarController presentModalViewController:signIn
animated:YES];
}
}
Теперь присвойте signInVC
свойство делегата, которое будет установлено до того, как оно будет представлено модально, и отправьте делегату сообщение после завершения входа в систему.
// in .h
@property(retain) id <SignInDelegate>delegate;
// in .m
@synthesize delegate;
-(IBAction)validateSignIn {
...
[delegate signInCompleted];
}
Вы можете написать любой метод, который хотите, этот пример упрощен, и полезно дать делегату некоторую информацию. В этом случае, например, вы можете передать имя пользователя или идентификатор пользователя, или что вы хотите.
Другой простой вариант - использование уведомлений . Эта опция позволяет любому объекту сообщать, когда что-то происходит, пока он регистрируется для этого. Учитывая те же объекты, что и в предыдущем примере, делегат приложения будет регистрироваться для уведомления, а контроллер представления входа будет публиковать его.
// in app delegate .m
-(BOOL)applicationDidFinishLaunching {
...
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(signInCompleted)
name:@"UserSignedInNotification"
object:nil];
}
// in SignInVC.m
-(IBAction)validateSignIn {
...
[[NSNotificationCenter defaultCenter]
postNotificationName:@"UserSignedInNotification"
object:self];
}
Дополнительные сведения о делегатах и уведомления в Общение с объектами .