0

我有一个简单的单视图应用程序,主视图中有一个按钮,它将我发送到另一个带有独立 xib 文件的视图。在第二个视图中,我有一个按钮可以让我返回主视图。我没有使用导航控制器。

谁能告诉我如何编程这个“后退”按钮,以便它再次显示主视图?

提前非常感谢。

4

3 回答 3

3

如果您像这样调用第二个视图控制器:

[self presentModalViewController:secondViewController animated:YES];

你可以这样关闭它:

[self dismissModalViewControllerAnimated:YES];
于 2012-04-22T23:16:56.430 回答
2

您可能需要考虑使用委托。创建一个委托将是一些工作,但会导致一个更加灵活的平台,然后您可以根据在辅助视图控制器中更改或更新的内容将信息发送到第一个视图控制器。这比 TommyG 将第二个视图控制器呈现为模态视图的答案更复杂,但同时它可能更灵活。您需要创建一个看起来像这样的通用协议(我更喜欢在单独的 objc 头文件中创建它们,因为我是肛门):

//In YouPressMyButtons.h
#import <Foundation/Foundation.h>
@protocol YouPressMyButtons <NSObject>
- (void)secondViewBackButtonPressed:(id)sender;
@end

然后你想让第一个视图控制器(主视图)符合协议并在第一个视图控制器(主视图)的头文件中实现 secondViewBackButtonPressed: 方法,如下所示:

//In FirstViewController.h
@interface FirstViewController : UIViewController <YouPressMyButtons>
- (void)secondViewBackButtonPressed:(id)sender;
@end

在第一个视图控制器实现文件中,您需要在某处实际创建该方法并告诉它关闭第二个视图,如下所示:

//In FirstViewController.m somewhere down at the bottom 
//(or on top if you prefer it that way;)
- (void)secondViewBackButtonPressed:(id)sender {
   //Dismiss your second view controller in here
return;
}

然后在第二个视图控制器中,您需要做的就是创建委托并在按下按钮时调用此方法。在第二个视图控制器头文件中,您需要像这样创建委托:

//In SecondViewController.h
@interface SecondViewController : UIViewController {
   __weak id <FCPViewSwap> delegate; //I am assuming you are using ARC like me :)
}
@property (weak, nonatomic) id<YouPressMyButtons> delegate;
- (IBAction)backButtonPressed:(id)sender; 
@end

最后,在第二个视图控制器实现文件中,您只需要调用委托方法,它就会将您发送回您在上面创建的第一个视图控制器方法,如下所示:

//Somewhere in SecondViewController.m
- (IBAction)backButtonPressed:(id)sender {
   NSLog(@"Back button pressed. Forwarding to parent controller.");
   [self.delegate secondViewBackButtonPressed:sender];
}

我还没有看到很多关于创建委托和使用它们在视图控制器之间发送信息的好的解释,所以我想我会在这里尽可能地解释它。这是在视图控制器之间发送您想要的任何信息的最强大的方法之一。您可以扩展协议中声明的方法,让您想要传递的变量数量不限。您还可以向协议添加方法和属性以使其更有用。请记住,您需要实现协议中的每个方法和属性,除非您将它们分成 @required 和 @optional 部分(有关协议和使用 @optional 说明符的详细说明,请参阅 Apple 的文档)。Apple 协议文档。希望这有帮助!

于 2012-04-23T00:47:56.870 回答
2

如果您只有两个视图,请考虑在 xcode 中使用“实用程序”模板

于 2012-04-23T03:27:30.277 回答