JKSegueActionViewController 1.0.2

JKSegueActionViewController 1.0.2

测试测试
Lang语言 Obj-CObjective C
许可 MIT
发布最新版本2014年12月

未明确所有权 维护。



  • Joseph Kain

安装

使用 JKSegueActionViewController

没有 JKSegueActionViewController,您将不得不编写类似下面的代码

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifer isEqualToString:@"MySegue1"]) {
        MyCustomViewController *vc = segue.destinationViewController;
        vc.delegate = self;
    } else if ([segue.identifer isEqualToString:@"MySegue2"]) {
        MyOtherCustomViewController *vc = segue.destinationViewController;
        vc.someProperty = [self computeSomeValue];
    } else if ([segue.identifer isEqualToString:@"MySegue3"]) {
        MyCustomTableViewController *vc = segue.destinationViewController;
        vc.delegate = self;
        vc.dataSource = [self dataSourceForObject:someObject];
    }
}

JKSegueActionViewController 是为那些认为 \[UIViewController prepareForSegue)sender:\] 是代码组织的糟糕工具的开发者准备的。JKSegueActionViewController 提供了一种更清晰的设计,可用于编写更清晰、更容易理解的代码。

从界面构建器执行 Segue 动作

首先,使用界面构建器设置 segue 的标识符为您的准备代码的方法。

Segue in interface builder

然后实现一个具有与 segue 标识符中使用相同签名的代码

-(void) segueToMySceneAction:(UIStoryboardSegue *)segue sender:(id)sender {
    // Prepare the destination view controller
    MyOtherCustomViewController *vc = segue.destinationViewController;
    vc.someProperty = [self computeSomeValue];
}

当(seg)触发时,JKSegueActionViewController 会自动调用您的方法。

Segue Blocks

JKSegueActionViewController 给 UIViewController 添加了一个使用一个用于准备代码的块来手动执行 seg 的方法。它允许您编写代码,以使您的执行和准备代码放在一起,以便更容易查找、阅读和理解。

[self performSegueWithIdentifier:@"MySegue1" sender:self withBlock:^(UIStoryboardSegue *segue, id sender) {
    // Prepare the destination view controller
    MyCustomViewController *vc = segue.destinationViewController;
    vc.delegate = self;
}];

完整 API

命名 segue 动作

编写一个 segue 动作方法,并为 segue 赋予一个方法名作为其标识符。JKSegueActionViewController 将自动调用您的操作。

-(void) segueToMySceneAction:(UIStoryboardSegue *)segue sender:(id)sender {
    // Prepare the destination view controller
    MyOtherCustomViewController *vc = segue.destinationViewController;
    vc.someProperty = [self computeSomeValue];
}

没有 sender 的命名 segue 动作

类似于上面的命名 segue 动作,但省略 sender 参数。

-(void) segueToMySceneAction:(UIStoryboardSegue *)segue {
    // Prepare the destination view controller
    MyOtherCustomViewController *vc = segue.destinationViewController;
    vc.someProperty = [self computeSomeValue];
}

performSegueWithIdentifier)sender: withBlock

手动执行 segue 时,请使用此方法而不是传统的 performSegueWithIdentifier)sender。传递一个要为您的 segue 准备的块。

[self performSegueWithIdentifier:@"MySegue2" sender:self withBlock:^(UIStoryboardSegue *segue, id sender) {
    // Prepare the destination view controller
    MyCustomViewController *vc = segue.destinationViewController;
    vc.delegate = self;
}];

setActionForSegueWithIdentifier: toBlock

当你有一个将手动执行的 segue 时,你可以使用此方法设置一个在每次执行 segue 时使用的块。

- (void) viewDidLoad {
    [super viewDidLoad]

    [self setActionForSegueWithIdentifier:@"MySegue3" toBlock:^(id theSender) {
        // Prepare the destination view controller
        MyCustomTableViewController *vc = segue.destinationViewController;

        vc.delegate = self;
        vc.dataSource = [self dataSourceForObject:someObject];
    }];
}

- (void) someOtherMethod {
    // This will perform the segue and then invoke the action block registered in -viewDidLoad
    [self performSegueWithIdentifier:@"MySegue3" sender:self];
}

prepareForSegue:sender:

如果您发现您想或需要使用传统的 prepareForSegue:sender:,您依然可以使用。只需实现您自己的准备ForSegue:sender:的一个副本,保留所有字符串匹配的荣耀。但是请务必调用[super prepareForSegue:sender:],否则您会破坏JKSegueActionViewController的逻辑。