测试已测试 | ✓ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布时间最新发布 | 2014年12月 |
由 Jonathan Crooke 维护。
依赖项 | |
ObjcAssociatedObjectHelpers | = 1.2.1 |
JRSwizzle | = 1.0 |
喜欢 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 同一方法的任何库都有问题。请留意警告!
祝您好运!