JCSegueUserInfo 1.2.0

JCSegueUserInfo 1.2.0

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

Jonathan Crooke 维护。



 
依赖项
ObjcAssociatedObjectHelpers= 1.2.1
JRSwizzle= 1.0
 

  • Jonathan Crooke

喜欢 UIStoryboard 吗?更喜欢 UIStoryboardSegue 吗?讨厌它们不能像理论上那样紧密地一起工作?试试 JCSegueUserInfo

想象一下,你希望在程序ographically 触发一个 storyboard segue,同时也要设置一些目标视图控制器的属性。目前,你不得不这样做

...
    self.temporaryProperty = @"foo";
    self.anotherTemporaryProperty = @(1);
    [self performSegueWithIdentifier:@"MySegue" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqual:@"MySegue"]) {
        SegueViewController *controller = segue.destinationViewController;
        controller.someProperty = self.temporaryProperty;
        controller.anotherProperty = self.anotherTemporaryProperty;   
        self.temporaryProperty = nil;
        self.anotherTemporaryProperty = nil;
    }
}

使用 JCSegueUserInfo 你可以这样做

[self jc_performSegueWithIdentifier:@"MySegue"
                            sender:self
                          userInfo:@{ @"someProperty" : @"foo",
                                      @"anotherProperty" : @(1) }];

好多了!

-[UIViewController jc_performSegueWithIdentifier:sender:userInfo: 接受一个 NSDictionary,该字典用于使用标准的 -[NSDictionary setValuesForKeysWithDictionary:] 方法在目标视图控制器实例上设置任意属性。我们修改了正常的 -[UIViewController performSegueWithIdentifier:sender:] 方法,以允许在这些值被存储时在目标控制器上设置这些值。

您也可以使用 -jc_setUserInfo:forSegueWithIdentifier:-jc_removeUserForSegueWithIdentifier: 在执行 segue 之前存储要设置的值。这些功能允许您使用非程序性的 segue;当您有值时设置它们,然后让 UIKit 按正常方式处理 segue。您的值将在目标视图控制器上设置。

注意

我们 swizzle-[UIViewController performSegueWithIdentifier:sender:] 以实现此功能。这使得此库与其他 swizzle 同一方法的任何库都有问题。请留意警告!

祝您好运!


[email protected]