IOS:移回两个视图
我一直坚持这个问题一段时间,找不到任何有用的信息,如何做到这一点..
我有一个基本视图(视图1),我可以在tableview中select项目。 在项目“页面”(视图2)时,我可以select编辑该项目,触发模态视图(视图3)。 在这个模式下,我可以select删除这个项目。 如果用户按下该button并确认他们想要删除该项目,我想发送应用程序回查看1 ..
我已经尝试了一些不同的东西( popToViewController
, pushViewController
, dismissViewController
等),但我不能得到任何工作。 如果我得到模式closures,查看2不closures。 有时甚至模态也不会消失。 基本视图是一个UITableViewController
,另外两个是UIViewControllers
,而我正在使用storyboard
。
你有几个select你可以使用NSNotificationCenter
或使用委托模式。 NSNotificationCenter易于使用,但也很棘手。
要使用通知中心,您需要将观察者添加到视图控制器类中。当您解散模态视图控制器时,您通知视图2视图3现在被解散,视图2可以解散自己…..
所以基本上当你通知中心,无论在通知它运行一个方法等….
让我们说你的观点3,你想解雇你的意见。
在view3 .m
-(IBAction)yourMethodHere { //dissmiss view [self.navigationController dismissModalViewControllerAnimated:YES]; // or [self dismissModalViewControllerAnimated:YES]; whateever works for you //send notification to parent controller and start chain reaction of poping views [[NSNotificationCenter defaultCenter] postNotificationName:@"goToView2" object:nil]; }
在视图2中。 H
// For name of notification extern NSString * const NOTIF_LoggingOut_Settings;
在@implementation
之后的#imports
之前的2. m
NSString * const NOTIF_LoggingOut_Settings = @"goToView2"; @implementation -(void)viewDidAppear:(BOOL)animated{ // Register observer to be called when logging out [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loggingOutSettings:) name:NOTIF_LoggingOut_Settings object:nil]; } /*--------------------------------------------------------------------------- * Notifications of 2 view *--------------------------------------------------------------------------*/ - (void)loggingOutSettings:(NSNotification *)notif { NSLog(@"Received Notification - Settings Pop Over popped"); [self.navigationController popViewControllerAnimated:NO];// change this if you do not have navigation controller //call another notification to go to view 1 [[NSNotificationCenter defaultCenter] postNotificationName:@"goToFirstView" object:nil]; }
添加另一个观察者到你的view1.h的第一个视图extern NSString * const NOTIF_FirstView;
在@implementation
之后的#imports
之前,
NSString * const NOTIF_FirstView = @"goToFirstView";
@implementation -(void)viewDidAppear:(BOOL)animated{ // Register observer to be called when logging out [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doYourThing:) name:NOTIF_FirstView object:nil]; } /*--------------------------------------------------------------------------- * Notifications of 1 view *--------------------------------------------------------------------------*/ - (void)ldoYourThing:(NSNotification *)notif { // do your thing }