ios学习-delegate、传值、跳转页面

 

1.打开xcode,然后选择ios--Application--Empty Application一个空项目。

项目目录:

2.输入项目名称以及选择保存路径即可。

3.创建文件夹Model、Controller。

4.Model文件夹创建User类:User.h User.m

代码:

User.h:

[html] view plaincopy
  1. #import <Foundation/Foundation.h>
  2. @interface User : NSObject
  3. @property  (nonatomic, retain) NSString *name;
  4. @property  (nonatomic, retain) NSString *pword;
  5. @end

User.m:

[html] view plaincopy
  1. #import "User.h"
  2. @implementation User
  3. @synthesize name;
  4. @synthesize pword;
  5. @end

5.创建controller文件里的4个文件。

TLViewController.h:

[html] view plaincopy
  1. #import <UIKit/UIKit.h>
  2. #import "UserDelegate.h"
  3. @interface TLViewController : UIViewController<UserDelegate>
  4. @end

UserDelegate协议类在后面。

TLViewController.m:

[html] view plaincopy
  1. #import "TLViewController.h"
  2. #import "User.h"
  3. #import "AddViewController.h"
  4. @interface TLViewController ()
  5. @end
  6. @implementation TLViewController{
  7. UILabel *labelname ;
  8. UILabel *labelpwd ;
  9. User *user;
  10. }
  11. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  12. {
  13. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  14. if (self) {
  15. }
  16. return self;
  17. }
  18. - (void)viewDidLoad
  19. {
  20. //显示用户名
  21. labelname = [[UILabel alloc]initWithFrame:CGRectMake(50, 20, 200, 50)];
  22. //设置显示文字
  23. labelname.text =[NSString stringWithFormat:@"用户名:%@",user.name];
  24. //设置字体:粗体,正常的是 SystemFontOfSize
  25. labelname.font = [UIFont boldSystemFontOfSize:20];
  26. //设置文字颜色
  27. labelname.textColor = [UIColor blackColor];
  28. [self.view addSubview:labelname];
  29. [labelname release];
  30. //显示密码
  31. labelpwd = [[UILabel alloc]initWithFrame:CGRectMake(50, 70., 200, 50)];
  32. //设置显示文字
  33. labelpwd.text = [NSString stringWithFormat:@"密   码:%@",user.pword];
  34. //设置字体:粗体,正常的是 SystemFontOfSize
  35. labelpwd.font = [UIFont boldSystemFontOfSize:20];
  36. //设置文字颜色
  37. labelpwd.textColor = [UIColor blackColor];
  38. [self.view addSubview:labelpwd];
  39. [labelpwd release];
  40. UIButton *btnAdd=[[UIButton alloc] initWithFrame:CGRectMake(10, 130, 300, 30)];
  41. [btnAdd setTitle:@"返    回" forState:UIControlStateNormal];
  42. [btnAdd setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  43. [btnAdd.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];
  44. btnAdd.backgroundColor = [UIColor redColor];
  45. [btnAdd addTarget:self action:@selector(BackView) forControlEvents :UIControlEventTouchUpInside];
  46. [self.view addSubview:btnAdd];
  47. [btnAdd release];
  48. [super viewDidLoad];
  49. }
  50. -(void)BackView{
  51. //    AddViewController *ad=[[AddViewController alloc] init];
  52. [self dismissViewControllerAnimated:YES completion:nil];
  53. //    [ad release];
  54. }
  55. -(void)setValue:(User *)userValue{
  56. user=userValue;
  57. }
  58. - (void)didReceiveMemoryWarning
  59. {
  60. [super didReceiveMemoryWarning];
  61. // Dispose of any resources that can be recreated.
  62. }
  63. @end

AddViewController.h:

[html] view plaincopy
  1. #import <UIKit/UIKit.h>
  2. #import "UserDelegate.h"
  3. @interface AddViewController : UIViewController<UITextFieldDelegate>{
  4. id<UserDelegate> deleage;
  5. }
  6. @property(assign,nonatomic)id<UserDelegate> delegate;
  7. @end

AddViewController.m:

[html] view plaincopy
  1. #import "AddViewController.h"
  2. #import "User.h"
  3. #import "TLViewController.h"
  4. @interface AddViewController ()
  5. {
  6. UITextField *tfname;
  7. UITextField *tfpassword;
  8. }
  9. @end
  10. @implementation AddViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  11. {
  12. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  13. if (self) {
  14. // 下一个界面的返回按钮
  15. UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];
  16. temporaryBarButtonItem.title = @"返回";
  17. self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
  18. [temporaryBarButtonItem release];
  19. }
  20. return self;
  21. }
  22. @synthesize delegate;
  23. - (void)viewDidLoad
  24. {
  25. [super viewDidLoad];
  26. UILabel *lname = [[UILabel alloc]initWithFrame:CGRectMake(10, 40, 100, 30)];
  27. //设置显示文字
  28. lname.text = @"用户名:";
  29. //设置字体:粗体,正常的是 SystemFontOfSize
  30. lname.font = [UIFont boldSystemFontOfSize:20];
  31. //设置文字颜色
  32. lname.textColor = [UIColor blackColor];
  33. lname.textAlignment=NSTextAlignmentRight;
  34. [self.view addSubview:lname];
  35. [lname release];
  36. UILabel *lpassword = [[UILabel alloc]initWithFrame:CGRectMake(10, 80, 100, 30)];
  37. //设置显示文字
  38. lpassword.text = @"密   码:";
  39. //设置字体:粗体,正常的是 SystemFontOfSize
  40. lpassword.font = [UIFont boldSystemFontOfSize:20];
  41. //设置文字颜色
  42. lpassword.textColor = [UIColor blackColor];
  43. lpassword.textAlignment=NSTextAlignmentRight;
  44. [self.view addSubview:lpassword];
  45. [lpassword release];
  46. tfname= [[UITextField alloc] initWithFrame:CGRectMake(110, 40, 200, 30)];
  47. [tfname setBorderStyle:UITextBorderStyleRoundedRect]; //外框类型
  48. tfname.placeholder = @"请输入用户名"; //默认显示的字
  49. tfname.delegate = self;
  50. [self.view addSubview:tfname];
  51. [tfname release];
  52. tfpassword= [[UITextField alloc] initWithFrame:CGRectMake(110, 80, 200, 30)];
  53. [tfpassword setBorderStyle:UITextBorderStyleRoundedRect]; //外框类型
  54. tfpassword.placeholder = @"请输入密码"; //默认显示的字
  55. tfpassword.delegate = self;
  56. tfpassword.secureTextEntry = YES; //密码
  57. [self.view addSubview:tfpassword];
  58. [tfpassword release];
  59. UIButton *btnAdd=[[UIButton alloc] initWithFrame:CGRectMake(10, 130, 300, 30)];
  60. [btnAdd setTitle:@"登       陆" forState:UIControlStateNormal];
  61. [btnAdd setTitle:@"登陆中......" forState:UIControlStateHighlighted];
  62. [btnAdd setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  63. [btnAdd setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];
  64. [btnAdd.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];
  65. btnAdd.backgroundColor = [UIColor redColor];
  66. [btnAdd addTarget:self action:@selector(LoginUser) forControlEvents :UIControlEventTouchUpInside];
  67. [self.view addSubview:btnAdd];
  68. [btnAdd release];
  69. // 创建自定义的触摸手势来实现对键盘的隐藏
  70. UITapGestureRecognizer *tapGr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)];
  71. tapGr.cancelsTouchesInView = NO;
  72. [self.view addGestureRecognizer:tapGr];
  73. }
  74. //键盘的隐藏
  75. -(void)viewTapped:(UITapGestureRecognizer*)tapGr{
  76. [tfname resignFirstResponder];
  77. [tfpassword resignFirstResponder];
  78. }
  79. //登陆并跳转
  80. -(void)LoginUser{
  81. NSLog(@"%@",tfname.text);
  82. TLViewController *tv=[[TLViewController alloc] init];
  83. self.delegate=tv;
  84. User *user=[[User alloc] init];
  85. user.name=tfname.text;
  86. user.pword=tfpassword.text;
  87. [self.delegate setValue:user];
  88. tv.modalTransitionStyle=UIModalTransitionStyleCrossDissolve;
  89. [self presentModalViewController:tv  animated:YES];
  90. [user release];
  91. [tv release];
  92. }
  93. - (BOOL)textFieldShouldReturn:(UITextField *)textField
  94. {
  95. [textField resignFirstResponder];
  96. return YES;
  97. }
  98. - (void)didReceiveMemoryWarning
  99. {
  100. [super didReceiveMemoryWarning];
  101. // Dispose of any resources that can be recreated.
  102. }
  103. @end

6.创建UserDelegate类:

UserDelegate.h:

[html] view plaincopy
  1. #import <Foundation/Foundation.h>
  2. #import "User.h"
  3. @protocol UserDelegate <NSObject>
  4. -(void)setValue:(User *)userValue;
  5. @end

7.AppDelegate文件:

AppDelegate.h

[html] view plaincopy
  1. #import <UIKit/UIKit.h>
  2. @class TLViewController;
  3. @class AddViewController;
  4. @interface AppDelegate : UIResponder <UIApplicationDelegate>
  5. @property (strong, nonatomic) UIWindow *window;
  6. @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
  7. @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
  8. @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
  9. //自定义控件
  10. //@property (strong, nonatomic) TLViewController *viewController;
  11. @property (strong, nonatomic) AddViewController *addviewController;
  12. - (void)saveContext;
  13. - (NSURL *)applicationDocumentsDirectory;
  14. @end

AppDelegate.m:

[html] view plaincopy
  1. #import "AppDelegate.h"
  2. #import "TLViewController.h"
  3. #import "AddViewController.h"
  4. @implementation AppDelegate
  5. @synthesize managedObjectContext = _managedObjectContext;
  6. @synthesize managedObjectModel = _managedObjectModel;
  7. @synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
  8. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  9. {
  10. self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  11. // Override point for customization after application launch.
  12. self.window.backgroundColor = [UIColor whiteColor];
  13. self.addviewController = [[AddViewController alloc] init];
  14. self.window.rootViewController = self.addviewController;
  15. [self.window makeKeyAndVisible];
  16. return YES;
  17. }
  18. - (void)applicationWillResignActive:(UIApplication *)application
  19. {
  20. // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
  21. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
  22. }
  23. - (void)applicationDidEnterBackground:(UIApplication *)application
  24. {
  25. // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
  26. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
  27. }
  28. - (void)applicationWillEnterForeground:(UIApplication *)application
  29. {
  30. // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
  31. }
  32. - (void)applicationDidBecomeActive:(UIApplication *)application
  33. {
  34. // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
  35. }
  36. - (void)applicationWillTerminate:(UIApplication *)application
  37. {
  38. // Saves changes in the application's managed object context before the application terminates.
  39. [self saveContext];
  40. }
  41. - (void)saveContext
  42. {
  43. NSError *error = nil;
  44. NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
  45. if (managedObjectContext != nil) {
  46. if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
  47. // Replace this implementation with code to handle the error appropriately.
  48. // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
  49. NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
  50. abort();
  51. }
  52. }
  53. }
  54. #pragma mark - Core Data stack
  55. // Returns the managed object context for the application.
  56. // If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application.
  57. - (NSManagedObjectContext *)managedObjectContext
  58. {
  59. if (_managedObjectContext != nil) {
  60. return _managedObjectContext;
  61. }
  62. NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
  63. if (coordinator != nil) {
  64. _managedObjectContext = [[NSManagedObjectContext alloc] init];
  65. [_managedObjectContext setPersistentStoreCoordinator:coordinator];
  66. }
  67. return _managedObjectContext;
  68. }
  69. // Returns the managed object model for the application.
  70. // If the model doesn't already exist, it is created from the application's model.
  71. - (NSManagedObjectModel *)managedObjectModel
  72. {
  73. if (_managedObjectModel != nil) {
  74. return _managedObjectModel;
  75. }
  76. NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Login" withExtension:@"momd"];
  77. _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
  78. return _managedObjectModel;
  79. }
  80. // Returns the persistent store coordinator for the application.
  81. // If the coordinator doesn't already exist, it is created and the application's store added to it.
  82. - (NSPersistentStoreCoordinator *)persistentStoreCoordinator
  83. {
  84. if (_persistentStoreCoordinator != nil) {
  85. return _persistentStoreCoordinator;
  86. }
  87. NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Login.sqlite"];
  88. NSError *error = nil;
  89. _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
  90. if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
  91. /*
  92. Replace this implementation with code to handle the error appropriately.
  93. abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
  94. Typical reasons for an error here include:
  95. * The persistent store is not accessible;
  96. * The schema for the persistent store is incompatible with current managed object model.
  97. Check the error message to determine what the actual problem was.
  98. If the persistent store is not accessible, there is typically something wrong with the file path. Often, a file URL is pointing into the application's resources directory instead of a writeable directory.
  99. If you encounter schema incompatibility errors during development, you can reduce their frequency by:
  100. * Simply deleting the existing store:
  101. [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]
  102. * Performing automatic lightweight migration by passing the following dictionary as the options parameter:
  103. @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}
  104. Lightweight migration will only work for a limited set of schema changes; consult "Core Data Model Versioning and Data Migration Programming Guide" for details.
  105. */
  106. NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
  107. abort();
  108. }
  109. return _persistentStoreCoordinator;
  110. }
  111. #pragma mark - Application's Documents directory
  112. // Returns the URL to the application's Documents directory.
  113. - (NSURL *)applicationDocumentsDirectory
  114. {
  115. return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
  116. }
  117. @end

效果图:

本项目传值用到delegate委托,可以可以用更加单的方法传值,就是在B页面定义一个User类,在A页面初始化B时进行赋值:如b.user=user1;

点击空白区域隐藏键盘,基本都是简单的一个demo而已,仅供参考学习。

项目如果报:release不能使用。

ARC forbids explicit message send of'release'

'release' is unavailable: not available inautomatic reference counting mode

解决办法:

打开当前工程,打开"Build Settings",找到Objective-C Automatic Reference Counting项,将它的值设置为NO。

ios学习-delegate、传值、跳转页面相关推荐

  1. ios 给网页传值_iOS开发—页面传值汇总

    情况1:A页面跳转到B页面 方法1:在页面跳转的同时,将A页面的值带到B页面 B页面的控制器中设置一个接收值的对象,并且设置一个显示值的textfield,设置outlet @property (no ...

  2. php根据ajax传值跳转页面_thinkphp实现简单的ajax传值

    html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD ...

  3. vue跳转页面常用的方法

    版权声明:本文为CSDN博主「宋文轩」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/qq_39071599/ ...

  4. segue和delegate实现两个页面传值

    页面传值 如果有两个页面A和B之前需要传值,如下图所示,从A页面打开一个B页面,填入一些信息后,展现在B页面.这个过程需要从B页面传数据给A页面. A->B的数据传递可以在segue中实现,B- ...

  5. ios 给网页传值_ios常见的页面传值方式

    iOS页面间的传值细分有很多种,基本的传值方式有三种:委托Delegate传值.通知NSNotification传值.Block传值,其他在项目中可能会遇到的还有:UserDefault或文件方式传值 ...

  6. php中的id怎么传值,uniapp如何跳转页面传值

    uniapp跳转页面传值的方法:首先给点击事件传入id:然后Methods中写方法,代码为[uni.navigateTo({url:'opportunity-form?id='+id})]:最后在详情 ...

  7. HTML5跳转页面并传值以及localStorage的用法

    1.首先,你得在那个页面把数据存入localStorage中吧.这个是必须的! localStorage.setItem("user",JSON.stringify(data.al ...

  8. php跳转传值,php如何跳转页面并传值?

    php跳转页面并传值的方法:1.POST传值法,用于html的[ ]表单跳转的方法:2.GET传值法,在页面跳转时,跟着url跳转:3.SESSION传值法,经常用于用户登陆后保存用户id之类的常用数 ...

  9. iOS UItextView监听输入特定字符跳转页面选择选项返回

    今天有朋友问我一个需求的实现,于是自己写了一个Demo简单的实现了一下: 需求是: 1>比如: 检测用户输入"A"字符串,跳转页面选择选项,将选择的选项放置textView里 ...

最新文章

  1. Windows使用MSVC,命令行编译,链接64位dll,Python调用
  2. 位操作(Bit manipulation)
  3. 【JUC并发编程07】Callable接口
  4. bash ps1变量_在 Linux 中打扮你的冬季 Bash 提示符
  5. 【Python金融量化 10- 100 】十、怎样的收益率预测模型才是好的模型?
  6. java 5 线程 睡眠,Java线程之线程的调度-休眠
  7. LINUX修改权限modify,linux文件权限查看及修改(实用)(View and modify Linux file permissions (practical)).doc...
  8. 多尺度:传统高斯金字塔,拉普拉斯金字塔及SIFT算法多尺度金字塔
  9. 写给那些要找电子发票的数据接口规范的程序猿
  10. 使用BackTrack4清除/修改Windows用户密码
  11. web自动化神器,QuickTester
  12. FW软件的安装及简单的使用;
  13. 基于hutool实现简单的加解密
  14. 并行网络测试软件,Manul:一款基于覆盖率引导的并行模糊测试工具
  15. annotation-driven 配置详解
  16. Codevs1378选课题解
  17. vueh5调用摄像头拍照_HTML5调用摄像头实现拍照功能(兼容各大主流浏览器)
  18. Datawhale-深入浅出pytorch简介安装和基础知识
  19. Linux文件删除但空间不释放问题篇
  20. arcgis 矢量编辑过程时,防止误移动操作设置粘滞移动容差设置大一点

热门文章

  1. Referer和Referrer Policy详解
  2. 【BCT】 关于BCT的SUBSEQUENT CONFLICTS后续冲突报错解决
  3. 必应每日壁纸下载|必应每日壁纸V3.3.1免费下载
  4. AI视频智能分析技术与应用(一)
  5. SpringBoot获取yml文件参数,超简单
  6. 品读张爱玲的一生的“母女劫”
  7. MongoDB入门学习(三):MongoDB的增删查改
  8. 模式识别和机器学习、数据挖掘的区别与联系
  9. e8/ecology8的非标管理功能在哪里
  10. 堆栈溢出一般是由什么原因导致的 堆栈溢出怎么解决