我对iPhone应用程序开发非常陌生。
我正在使用Objective-C++和std CPP为iPhone模拟器开发一个示例应用程序。

我的应用程序中有两个视图,关于CPP代码的某些事件,我正在使用第一个视图控制器中的以下代码显示第二个视图。

// Defined in .h file
secondViewScreenController *mSecondViewScreen;

// .mm file Code gets called based on event from CPP (common interface function between Objective-C++ and CPP code)
mSecondViewScreen = [[secondViewScreenController alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:mSecondViewScreen animated:YES];

我能够在屏幕上看到第二个视图,但是问题是我无法从第一个视图控制器结束/删除第二个视图控制器。

我如何使用第二视图控制器的指针或任何其他方法从第一视图控制器中删除第二视图控制器。

要删除第二个视图,我在第二个视图控制器文件中有以下代码,该代码在第二个视图的按钮单击事件中被调用。
// In .mm of second view controller.
- (IBAction)onEndBtnClicked:(UIButton *)sender
{
   [self dismissModalViewControllerAnimated:NO];
   [self.navigationController popViewControllerAnimated:YES];
}

上面的代码完美地工作,当我单击秒视图的结束按钮时,它将第二个视图控制器从屏幕上移除,并导航到第一个视图,我如何使用相同的代码从第一个视图控制器中移除第二个视图。

我绑在一起使用NSNotificationCenter从第一个视图向第二个视图发送事件,以调用函数onEndBtnClicked,但是它不起作用。

正确的做法是什么?

OSX版本:10.5.8和Xcode版本:3.1.3

最佳答案

在secondViewController中创建一个协议,如:

@protocol SecondViewScreenControllerDelegate <NSObject>

- (void)secondViewScreenControllerDidPressCancelButton:(UIViewController *)viewController sender:(id)sender;

// Any other button possibilities

@end

现在,您必须在secondViewController类中添加一个属性:
@property (weak, nonatomic) id<SecondViewScreenControllerDelegate> delegate;

您可以在secondViewController实现中对其进行整理:
@synthesize delegate = _delegate;

最后,您要做的就是在firstViewController中实现该协议,并在展示它之前正确设置secondViewController:
@interface firstViewController : UIViewController <SecondViewScreenControllerDelegate>

...
@implementation firstViewController

    - (void)secondViewScreenControllerDidPressCancelButton:(UIViewController *)viewController sender:(id)sender
    {
         // Do something with the sender if needed
         [viewController dismissViewControllerAnimated:YES completion:NULL];
    }

然后从第一个呈现第二个ViewController时:
UIViewController *sec = [[SecondViewController alloc] init]; // If you don't need any nib don't call the method, use init instead
sec.delegate = self;
[self presentViewController:sec animated:YES completion:NULL];

准备好了每当您要从第一个关闭secondViewController时,只需调用:(在secondViewController实现内部)
[self.delegate secondViewScreenControllerDidPressCancelButton:self sender:nil]; // Use nil or any other object to send as a sender

发生的所有事情就是发送了第二个ViewController的指针,您可以从第一个使用它。然后,您可以毫无问题地使用它。不需要C++。在Cocoa中,您不需要C++。使用Objective-C几乎可以完成所有事情,而且它更具动态性。

关于objective-c - 从另一个 View Controller 中删除 View Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14021309/

10-11 00:32