我有一个简单的单个View应用程序,在主视图中有一个按钮,它将我发送到另一个带有独立xib文件的视图。在第二个视图中,我有一个按钮,应该将我发送回主视图。我没有使用导航控制器。
任何人都可以告诉我如何编程这个“后退”按钮,这样它会再次显示主视图吗?
提前非常感谢。
答案 0 :(得分:3)
如果你这样调用第二个viewcontroller:
[self presentModalViewController:secondViewController animated:YES];
你可以这样解雇它:
[self dismissModalViewControllerAnimated:YES];
答案 1 :(得分: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 Documentation on Protocols。希望这有帮助!
答案 2 :(得分:2)
如果您只有两个视图,请考虑在xcode中使用“实用程序应用”模板