1

我已经被这个问题困扰了一段时间了,找不到任何有用的信息来说明如何做到这一点..

我有一个基本视图(视图 1),我可以在其中选择表视图中的项目。在项目“页面”(视图 2)上,我可以选择编辑该项目,触发模态视图(视图 3)。在这个模态视图中,我可以选择删除这个项目。如果用户按下该按钮并确认他们要删除该项目,我想将应用程序发送回查看 1..

我尝试了许多不同的东西(popToViewController,等) pushViewControllerdismissViewController但我什么也做不了。如果我关闭模式,则视图 2 不会关闭。有时甚至模态也不会消失。基本视图是 a UITableViewController,其他两个是UIViewControllers,我正在使用storyboard

4

1 回答 1

1

您有几个选项可以使用NSNotificationCenter或使用委托模式。 NSNotificationCenter易于使用但也很棘手。

要使用通知中心,您需要将观察者添加到您的视图控制器类。当您关闭模式视图控制器时,您会通知您的视图 2 视图 3 现在已关闭,view2 可以自行关闭.....

所以基本上当你通知中心时,无论通知什么,它都会运行一个方法等......

假设您在视图 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;

在视图 2.m 之前@implementation之后#imports

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;

在视图中 1.m before @implementationafter#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
}
于 2013-01-09T20:46:10.040 回答