ios - 展开 Storyboard(退出)segue 是否可以取代父场景中对子委托(delegate)的需求?

标签 ios delegates uistoryboard uistoryboardsegue

在ios6中展开 Storyboardsegue是否可以取代在ios5中使源场景实现委托(delegate)以将数据从子场景传回父场景的需要?

我通常的做法是:

父 Controller header : 调用子场景的Delegate

@interface ParentViewController : UIViewController <ChildViewControllerDelegate>
//ok not much to show here, mainly the delegate
//properties, methods etc
@end

父 Controller 主体(主体): 准备segue,设置委托(delegate),从子场景创建返回方法

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

   if ([[segue identifier] isEqualToString:@"toChildScene"])
   {
       UINavigationController *childViewController = segue.destinationViewController;
       childViewController.delegate = self;
   }
}

#pragma mark - Delegate Segue Methods

-(void) childViewControllerDidSave: (ChildViewController *) controller Notes:(NSString *)sNotes
{
   someTextLabel.Text = sNotes
   [self dismissModalViewControllerAnimated:YES];    
}

子 Controller header : 创建委托(delegate),引用父场景方法

@class ChildViewController;

@protocol ChildViewControllerDelegate <NSObject>
-(void) childViewControllerDidSave: (ChildViewController *) controller Notes:(NSString *)sNotes
@end

@interface ChildViewController : UIViewController 
@property (weak, nonatomic) id <ChildViewControllerDelegate> delegate;
//properties, methods, etc
@end

子 Controller 主体(主体): 调用父场景方法

- (IBAction)someAction:(id)sender
{
   [self.delegate childViewControllerDidSave:self sNotes:someTextField.text];
}

现在是百万美元的问题: iOS 6 中这个过程现在更简单了吗?我可以使用展开转场/退出转场来减少大量工作吗?任何例子将不胜感激。

最佳答案

是的。

Unwind Segues 是一种抽象的委托(delegate)形式。在 iOS 6 中,在关闭 View Controller 时使用展开而不是委托(delegate)来向后传递数据更简单。

在父 View Controller 中,创建一个 unwind 方法,该方法返回一个 IBAction 并采用 UIStoryboardSegue 作为参数:

- (IBAction)dismissToParentViewController:(UIStoryboardSegue *)segue {
    ChildViewController *childVC = segue.sourceViewController;
    self.someTextLabel.Text = childVC.someTextField.text;
}

然后,在 subview Controller 中,按住 Control 键并从关闭按钮拖动到绿色退出图标以连接展开转场:

enter image description here

关于ios - 展开 Storyboard(退出)segue 是否可以取代父场景中对子委托(delegate)的需求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13368480/

相关文章:

ios - cocos2d-iphone中方法的随机实现?

c# - 将 Action 用作属性(而不是 Field)时,调用该方法会导致错误 : Property access must assign to the property or use its value

ios - 需要将值从我的 tableView 传递到另一个 View 上的标签?

iphone - 使用 segues 自动旋转 View

ios - 如何处理此设计 - iOS

php - 使用 PHP 或 Javascript 检查 iOS 版本是否为 3.0 或更高版本

iphone - Google+ API 还没有?

C# Monotouch/Xamarin.iOS - 可滚动的 UIView

ios - 以编程方式触发摇动事件iOS

ios - 使用未声明的类型 "ViewController"