objective-c - iOS利用segue顺传的实现原理问题
大家讲道理
大家讲道理 2017-04-18 09:13:14
0
4
400

在iOS简单通讯录的教程中,从登录界面到通讯录联系人界面的数据顺传部分的方法如下,根据不同的登录用户名,变换通讯录联系人界面的标题:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
  UIViewController *vc = segue.destinationViewController;
  vc.title = [NSString stringWithFormat:@"%@的联系人列表",_accountField.text];
}

我的理解是:这个方法新建了一个UIViewController类的对象vc,并把seguedestinationViewController赋值给了vc,然后改变了vc对象的title,最后也没有返回vc,和destinationViewControllertitle应该没有关系啊?为什么这样写是正确的呢?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(4)
刘奇

Cette méthode crée un nouvel objet vc de la classe UIViewController
Il n'y a aucune opération pour créer un nouveau VC ici, il n'y a pas d'allocation de mémoire.

UIViewController *vc = segue.destinationViewController;
vc.title = [NSString stringWithFormat:@"%@的联系人列表",_accountField.text];

Ce code est exactement le même que celui ci-dessous

segue.destinationViewController.title = [NSString stringWithFormat:@"%@的联系人列表",_accountField.text];

Bien sûr, il n'est pas nécessaire de revenir.

洪涛

Si vous n'utilisez pas segue pour générer un vc à partir de sb, c'est probablement comme ça

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"your sb name" bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"your vc identifier"];
vc.title = @"your title";
...
present or push vc

Lorsque Segue appelle destinationViewController, il fait en fait la même chose. Il génère un vc à partir de sb et vous le renvoie
Ce vc est le même que celui que vous avez généré vous-même
{

vc.title = @"your title";
...

}

present or push vc by segue
洪涛

VC n'est pas nouvellement créé, c'est juste un pointeur vers le contrôleur de vue cible, qui est le contrôleur de vue à sauter

左手右手慢动作
  • (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender Cette méthode est appelée lors du changement d'interface. À ce stade, segue contient déjà l'interface à laquelle vous souhaitez accéder, pas Created. à ce moment. Le storyboard créera l'objet viewController souhaité et le donnera à la séquence.

UIViewController *vc = segue.destinationViewController;
vc.title = [NSString stringWithFormat:@"%@'s contact list",_accountField.text];
Ces deux lignes de code sont les objectifs de votre segue VC a été supprimé et son titre a été modifié.
Le point clé est de comprendre que le VC cible vers lequel vous allez est construit par storybard, pas quelque chose que vous créez puis retournez.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal