Oct*_*tan 2 iphone xcode ios uistoryboardsegue
我正在开发一个iOS应用程序,我连续3次ViewControllers:
TableViewController- > DetailViewController- >ImageViewController
我用一个按钮执行de forward Segue(只需控制拖动Storyboard)然后返回我有一个自定义后退按钮
[self.navigationController popViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)
要发送数据,我使用
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[segue.destinationViewController someFunction];
}
Run Code Online (Sandbox Code Playgroud)
为了将数据发送到父ViewController,我可以使用prepareForSegue的DetailViewController,但它不工作ImageViewController,有我一定要使用Notifications.
我可以使用prepareForSegue发送数据popViewControllerAnimated吗?
在这两种情况下我都应该使用通知吗?
我所拥有的DetailViewController是一个按钮,它执行Seview到ImageViewController(只是控制拖动Storyboard)和一个后退按钮:
- (IBAction)backAction:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
然后功能:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"forwardSegue"]) {
[segue.destinationViewController someFuntionToImageViewController];
} else {
[segue.destinationViewController someFuntionToParentViewController];
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到我无法为popViewController动作分配segue.identifier .
Tob*_*obi 11
Apple建议使用以下方法在segues导航的视图控制器之间传递数据:
要传递数据:
您在目标vc上声明属性并在prepareForSegue方法中设置其值.(所以你这样做的方式)
@interface SomeViewController
@property (strong, nonatomic) VeryImportantData *data;
//...
@end
@implementation SourceVC
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
VeryImportantData *theData = ...;
segue.destinationViewController.data = theData;
}
Run Code Online (Sandbox Code Playgroud)
传回数据
您声明了一个委托协议.这看起来像这样:
@protocol SomeViewControllerDelegate
- (void)someViewController:(SomeViewController *) someVC didFinishWithData:(SomeData *) data;
@end
Run Code Online (Sandbox Code Playgroud)
您的目标vc提供委托属性:
@property (weak, nonatomic) id<SomeViewControllerDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
一旦准备好关闭,目标vc就会调用它的委托方法:
@implementation SomeViewController
- (void) close
{
[delegate someViewController:self didFinishWithData:self.data];
}
Run Code Online (Sandbox Code Playgroud)
并且您的源控制器实现协议并将其自身设置为prepareForSegue方法中目标vc的委托.
@implementation SourceVC
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
segue.destinationViewController.delegate = self;
}
//...
- (void)someViewController:(SomeViewController *) someVC didFinishWithData:(SomeData *) data
{
self.receivedData = data;
[self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7132 次 |
| 最近记录: |