对于Swift2到3的prepareForSegue迁移感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解swifttransfer,并且为您提供关于iOS>>prepareForSegue>
对于Swift 2到3的prepareForSegue迁移感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解swift transfer,并且为您提供关于iOS >> prepareForSegue >> IBOutlet更新不起作用?、IOS Swift prepareForSegue 视图页面跳转、ios – prepareForSegue和代表、ios – prepareForSegue未从自定义uitableviewcell调用的宝贵知识。
本文目录一览:- Swift 2到3的prepareForSegue迁移(swift transfer)
- iOS >> prepareForSegue >> IBOutlet更新不起作用?
- IOS Swift prepareForSegue 视图页面跳转
- ios – prepareForSegue和代表
- ios – prepareForSegue未从自定义uitableviewcell调用
Swift 2到3的prepareForSegue迁移(swift transfer)
这个问题可能已经回答了,但我找不到。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {}
这段代码在swift 2中工作正常,但是现在给我一个错误,以删除替代。
确切的错误:“方法不会覆盖其超类中的任何方法”
快速3的新正确方法是什么? 我似乎在任何地方都找不到任何文档。
答案1
小编典典在Swift 3.0中更改了方法签名
取代这个
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
用
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
iOS >> prepareForSegue >> IBOutlet更新不起作用?
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { MYSecondViewController* secondVC = (MYSecondViewController*)segue.destinationViewController; secondVC.titleLabel.text = @"First VC Says: You Are Second!!"; //This doesn't work secondVC.dataPassstring = @"First VC Says: You Are Second!!"; //This works + secondVC viewDidLoad }
如果我直接更新Label,它就不起作用.
如果我更新一个字符串属性,然后将其分配给第二个VC viewDidLoad中的标签,它确实有效.
这是否意味着在prepareForSegue调用后第二个VC viewDidLoad方法尚未被调用?
是否调用了一些init方法(因此Nsstring对象可以通过)?如果是的话,哪一个?
有没有办法从第一个VC更新第二个VC中的IBOutlets?
解决方法
您应该将另一个视图控制器的视图视为私有,并且永远不要尝试操纵它们.它打破了封装的OOD原则.
您要做的是将(字符串或其他类型)属性添加到目标视图控制器,并在prepareForSegue中设置THOSE.然后在目标视图控制器的viewWillAppear方法中,将这些属性值复制到视图控制器的视图中.
在您的情况下,datePassstring属性正是您想要的.
这样,如果您在路上更改第二个视图控制器的结构,并决定将信息显示到其他视图,则不会断开2个视图控制器之间的链接.您的目标视图控制器仍然可以从其源中获取数据,并使用它执行不同的操作.
附:正如另一张海报所说,设置secondVC.titleLabel.text失败的原因是在prepareForSegue中,目标视图控制器的视图尚未加载.
IOS Swift prepareForSegue 视图页面跳转
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if segue.identifier == "goToCollection" {
let viewController:CollectionViewController = segue.destinationViewController as CollectionViewController //目标视图、页面
viewController.setSegueParams(txtName.text, desc: txtDesc.text)
}
}
ios – prepareForSegue和代表
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"MoreOptions"]) { UINavigationController *navigationController = segue.destinationViewController; MoreOptionsViewController *controller = (MoreOptionsViewController *)navigationController.topViewController; controller.delegate = self; } else if ([segue.identifier isEqualToString:@"FullStoryView"]) { SingleStoryViewController *detailViewController = segue.destinationViewController; detailViewController.urlObject = sender; } }
所有这一切都很好,但我想更好地尝试了解代码.我不明白的是,我必须通过从navigationController.topViewController获取参考,而不是像在第二个if条件中那样从segue.destinationViewController中获取它,从而获得对MoreOptionsViewController的引用.是因为我将当前视图控制器(self)设置为代理?再次,我不是想解决一个问题,只是想更好地了解发生了什么.
解决方法
ios – prepareForSegue未从自定义uitableviewcell调用
override func prepareForSegue(segue: UIStoryboardSegue!,sender: AnyObject!) { println("PREPARE FOR SEGUE") if segue.identifier == "newSegue" { println("PREPARE FOR NEW SEGUE") } else if segue.identifier == "detailSegue" { println("PREPARE FOR DETAIL SEGUE") } } override func tableView(tableView: UITableView!,didSelectRowAtIndexPath indexPath: NSIndexPath!) { println("You selected cell!") }
我怀疑在定义自定义单元格时可能会出错:
override func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let CellIndentifier: Nsstring = "ListPrototypeCell" var cell : MyTableViewCell = tableView.dequeueReusableCellWithIdentifier(CellIndentifier) as MyTableViewCell var myClass: MyClass = self.myList.objectAtIndex(indexPath.row) as MyClass cell.setCell(author: myClass.author,message: myClass.message) return cell }
有帮助吗?
解决方法
还要检查功能签名.不再需要隐式展开的选项的感叹号:
func tableView(tableView: UITableView,didSelectRowAtIndexPath indexPath: NSIndexPath) { let cell = tableView.cellForRowAtIndexPath(indexPath) tableView.deselectRowAtIndexPath(indexPath,animated: true) performSegueWithIdentifier("mySegue",sender: cell) } override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) { }
今天的关于Swift 2到3的prepareForSegue迁移和swift transfer的分享已经结束,谢谢您的关注,如果想了解更多关于iOS >> prepareForSegue >> IBOutlet更新不起作用?、IOS Swift prepareForSegue 视图页面跳转、ios – prepareForSegue和代表、ios – prepareForSegue未从自定义uitableviewcell调用的相关知识,请在本站进行查询。
本文标签: