使用新的@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"];
}
希望能帮到大家.
网友评论