@IBSegueAction 介绍和使用

2019-06-14  本文已影响0人  DearDan_f92e

使用新的@IBSegueAction属性注释的视图控制器方法可用于在代码中创建segue的目标视图控制器,使用具有任何所需值的自定义初始化程序。 这使得可以在故事板中使用具有非可选初始化要求的视图控制器。 在源视图控制器上创建从segue到@IBSegueAction方法的连接。

在支持Segue Actions的新OS版本上(10.15),将调用该方法,并且它返回的值将是传递给prepare(for:sender :)的segue对象的destinationViewController。 可以在单个源视图控制器上定义多个@IBSegueAction方法,这可以减少在prepare(for:sender :)中检查segue标识符字符串的需要。

IBSegueAction方法最多需要三个参数:编码器,发送者和segue的标识符。 第一个参数是必需的,如果需要,可以从方法的签名中省略其他参数。 必须将NSCoder传递到目标视图控制器的初始化程序,以确保使用故事板中配置的值自定义NSCoder。 该方法返回一个视图控制器,该视图控制器与故事板中定义的目标控制器类型匹配,或者返回nil,以使用标准init(编码器:)方法初始化目标控制器。 如果你知道不需要返回nil,则返回类型可以是非可选的。

在Swift中,添加@IBSegueAction属性:


@IBSegueAction
func makeDogController(coder: NSCoder, sender: Any?, segueIdentifier: String?) -> ViewController? {
    PetController(
        coder: coder,
        petName:  self.selectedPetName, type: .dog
    )
}

在Objective-C中,在返回类型前面添加IBSegueAction:

- (IBSegueAction ViewController *)makeDogController:(NSCoder*)coder

                                             sender:(id)sender

                                    segueIdentifier:(NSString*)segueIdentifier

{

    return[PetController initWithCoder:coder

                                petName:self.selectedPetName

                                   type:@"dog"];

}

希望能帮到大家.

上一篇 下一篇

猜你喜欢

热点阅读