美文网首页IOSiOS开发iOS学习笔记
界面之间的跳转传递模型数据注意点

界面之间的跳转传递模型数据注意点

作者: Z了个L | 来源:发表于2016-02-23 01:22 被阅读138次
  • 第一个界面的代码
// XMGContactVC_2.h
#import <UIKit/UIKit.h>

@class XMGContactItem;
@interface XMGContactVC_2 : UITableViewController

/** 用户名*/
@property (nonatomic ,strong) NSString *accountName;

/** 联系人模型*/
@property (nonatomic ,strong) XMGContactItem *contactItem;

@end

// XMGContactVC_2.m  -- 只给了部分代码
#import "XMGContactVC-2.h"
#import "XMGAddVC-3.h"
#import "XMGContactItem.h"
#import "XMGEditVC-4.h"

@interface XMGContactVC_2 ()<UIActionSheetDelegate,XMGAddVCDelegate>

/** 存放传递的ContactItem模型*/
@property (nonatomic ,strong) NSMutableArray *dataArray;

@end

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    //获取目标控制器

    if ([segue.destinationViewController isKindOfClass:[XMGAddVC_3 class]]) {
        XMGAddVC_3 *addVC=  (XMGAddVC_3 *)segue.destinationViewController;
        //addVC.contactVC = self;
        //设置代理
        addVC.delegate = self;
    }else {

       XMGEditVC_4  *eidtVC=  (XMGEditVC_4 *)segue.destinationViewController;

        //取出当前选中的行模型
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        XMGContactItem *item = self.dataArray[indexPath.row];
        //eidtVC.view.backgroundColor = [UIColor redColor];
        //把当前选中的行模型传递给下一个控制器
        eidtVC.contactItem = item;

    }


}

@end

把当前选中的行模型传递给下一个控制器eidtVC.contactItem = item;

  • 第二个界面
// XMGEditVC_4.h
#import <UIKit/UIKit.h>

@class XMGContactItem;
@interface XMGEditVC_4 : UIViewController

/** 当前选中的行模型*/
@property (nonatomic ,strong) XMGContactItem *contactItem;


@end

// XMGEditVC_4.m

#import "XMGEditVC-4.h"
#import "XMGContactItem.h"

@interface XMGEditVC_4 ()
@property (weak, nonatomic) IBOutlet UITextField *nameTextF;
@property (weak, nonatomic) IBOutlet UITextField *phoneTextF;

@end

@implementation XMGEditVC_4

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.


//    NSLog(@"self.contactItem.name===%@",self.contactItem.name);
//    第二种方式给两个文本框赋值
//    self.nameTextF.text = self.contactItem.name;
//    self.phoneTextF.text = self.contactItem.phone;

}

// 第一种方式给两个文本框赋值
- (void)setContactItem:(XMGContactItem *)contactItem {
    _contactItem = contactItem;

    self.nameTextF.text = self.contactItem.name;
    self.phoneTextF.text = self.contactItem.phone;
}
  • 首先开发中可能一些人给两个文本框属性赋值会直接放在set方法里面重写给模型属性赋值的setContactItem方法,但是是错误的,为什么,因为此时的文本框并没有创建出来,此时打印self.nameTextF的值为nil,那么肯定不行而这个问题之所以会出现的原因可能是对控制器的view的加载方式其实是懒加载理解的还不透彻,所以要给两个文本框赋值,就应该在view加载完毕之后去赋值,切记切记
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.


//    NSLog(@"self.contactItem.name===%@",self.contactItem.name);
    self.nameTextF.text = self.contactItem.name;
    self.phoneTextF.text = self.contactItem.phone;

}

//- (void)setContactItem:(XMGContactItem *)contactItem {
//    _contactItem = contactItem;
//
//    self.nameTextF.text = self.contactItem.name;
//    self.phoneTextF.text = self.contactItem.phone;
//}
  • 代码下载地址:https://github.com/zhangli940210/LZ-

相关文章

网友评论

    本文标题:界面之间的跳转传递模型数据注意点

    本文链接:https://www.haomeiwen.com/subject/hqmbkttx.html