TKRSegueOptions 0.1.2

TKRSegueOptions 0.1.2

测试已测试
语言 Obj-CObjective C
许可证 MIT
发布最新发布2014年12月

tokorom 维护。



  • tokorom

您可以使用 UIStoryboardSegue 将对象传递给目标视图控制器。

现在您对视图控制器转换还有什么抱怨吗?

#import "NextViewController.h"
#import "ModalViewController.h"

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([@"Next" isEqualToString:segue.identifier]) {
        NextViewController *nextViewController = (NextViewController *)segue.destinationViewController;
        nextViewController.number = @1;
        [self.navigationController pushViewController:nextViewController animated:YES];
    } else if ([@"Modal" isEqualToString:segue.identifier]) {
        ModalViewController *modalViewController = (ModalViewController *)segue.destinationViewController;
        modalViewController.number = @2;
        [self.navigationController presentViewController:modalViewController animated:YES completion:nil];
    }
}
  • 您必须导入转换目标视图控制器的类...
  • 您必须发布传递值的公共方法...

TKRSegueOptions 将解决这些问题!

简单使用

您只需在视图控制器转换时传递值。

  • 在 pch 中导入
#import "TKRSegueOptions.h"
  • 源视图控制器
[self performSegueWithIdentifier:@"Modal" options:@888];
  • 目标视图控制器
self.label.text = self.segueOptions.stringValue; //< @"888"

其他用法

传递字典

// Source View Controller
NSDictionary *options = @{
    @"url": self.url,
    @"shop": self.shop,
};
[self performSegueWithIdentifier:@"Modal" options:options];

// Destination View Controller
NSURL *url = self.segueOptions[@"url"];

如果您想以更紧凑的格式执行...

// Source View Controller
CustomSegueOption *option = [CustomSegueOption new];
option.number = @888;
option.string = @"hello";
[self performSegueWithIdentifier:@"Modal" options:option];

// Destination View Controller
CustomSegueOption *option = (CustomSegueOption *)presentedViewController.segueOptions;
NSLog(@"number: %@, string: %@", option.number, option.string);

如果您不能使用 performSegue(例如容器视图)...

// Implement this method in source view controller
- (TKRSegueOptionSetting *)segueOptionSetting
{
    __weak typeof(self) wself = self;
    return [TKRSegueOptionSetting settingWithDictionary:@{
        @"Embed1": ^{
            return wself.leftLabel.text;
        },
        @"Embed2": ^{
            return wself.rightLabel.text;
        },
    }];
}
  • 键是 UIStoryboard 的标识符
  • 值是返回要传递给转换目标的代码块

如果您想使用自定义 segue...

@implementation CustomSegue

- (void)perform
{
    UIViewController *sourceViewController = self.sourceViewController;
    UIViewController *viewController;
    viewController = [sourceViewController.storyboard instantiateViewControllerWithIdentifier:@"NextViewController"];

    // you can use `takeOverSegueOptionsFromViewController:`
    [viewController takeOverSegueOptionsFromViewController:self.destinationViewController];

    [self.sourceViewController presentViewController:viewController animated:YES completion:nil];
}

@end

补充

  • 如果您实现了 prepareForSegue)sender:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  // You must call the super
  [super prepareForSegue:segue sender:sender];

  // Your codes ...
}

Swift 示例

  • 源视图控制器
self.performSegueWithIdentifier("Modal", options: ["title": "TITLE"])
  • 目标视图控制器
if let title = self.segueOptions?["title"] as? NSString {
  self.label.text = title //< "TITLE"
}

更多信息