作为IOS开发人员,在进行开发之前,你肯定会和客户沟通,客户到底需要的是什么样的app?你要怎么去开发。虽然你可以让客户给你个例子,如客户觉得哪一款app的界面、功能比较好,会告诉你参考,但是最为开发人员,还是要考虑很多因素。下面app软件开发小编以一个在威客网上看到的一个开发任务为例,进行解析:
任务的内容:手机android端和IOS开发,PC端基于B/S架构应用。首先明白技术上的要求:
首先,客户提出B/S架构主要是区别于C/S结构。这个不用客户说,PC端肯定是基于B/S架构的,现在的pc上在广域网上运行的,且B/S架构可以服务器操作系统的选择较多,满足客户降低成本的需求。难度相对于C/S也较低,自然开发成本也较低。如果客户能说出这样的要求肯定不是小白客户。当然想要做IOS开发的客户基本上市对这个行业比较了解或者是有特别的用途。
在这个IOS开发中,客户提出了一个参考APP应用,即“快速问医生”。下载看了下,是个看病收费的一款app,但是费用相对不高,因为就是以咨询为主。当然你要提问、咨询等等也是要先注册的。
关于IOS开发中的这个注册功能是较容易实现的。就是先把登录界面文本框、按妞等让美工做出图,接下来给注册按钮编辑个单击事件,跳转到注册的页面,再注册页面中加入登录名、密码、验证等控件,提交按钮(也要加入单击事件),在单击事件中,要连接数据库,并把上面填写的内容存到数据库,在判断当前的数据库中是否存在相同的用户名,如果没有,可将上面填写的内容传输到数据库。这个不管是IOS开发还是网站注册页面的开发都是这样一个流程。实现的代码如下:
//创建输入框
- (void)addInputOne
{
//基本参数定义
CGFloat padx = 95.0f;
_vFrame = CGRectMake(10, 14, 300, 125);
UIFont *lpFont = [UIFont boldSystemFontOfSize:16];
//邮箱和密码背景颜色设置
_view = [[UIView alloc] initWithFrame:_vFrame];
_view.layer.cornerRadius = 8.0;
_view.layer.borderWidth = 1;
_view.layer.borderColor = [UIColor colorWithRed:209.0f/255.0f green:209.0f/255.0f
blue:209.0f/255.0f alpha:1.0f].CGColor;
[_view setBackgroundColor:[UIColor colorWithRed:247.0f/255.0f green:247.0f/255.0f
blue:247.0f/255.0f alpha:1.0f]];
[self.view addSubview:_view];
[_view release];
//用户名与密码中间分割线
UIView *lineOne = [[UIView alloc] initWithFrame:CGRectMake(10, 53, 300, 1)];
[lineOne setBackgroundColor:[UIColor colorWithRed:209.0f/255.0f green:209.0f/255.0f
blue:209.0f/255.0f alpha:1.0f]];
[self.view addSubview:lineOne];
[lineOne release];
//用户名
UILabel *_unameLab = [[UILabel alloc] initWithFrame:CGRectMake(20, 2, 55, 40)];
[_unameLab setText:@"用户名"];
_unameLab.highlighted = YES;
_unameLab.highlightedTextColor = [UIColor blackColor];
[_unameLab setFont:lpFont];
[_unameLab setBackgroundColor:[UIColor clearColor]];
[_unameLab setTextColor:[UIColor blackColor]];
[_view addSubview:_unameLab];
[_unameLab release];
_uname = [[UITextField alloc] initWithFrame:CGRectMake(padx, 10, 230, 40)];
[_uname setBackgroundColor:[UIColor clearColor]];
[_uname setTag:101];
[_uname setUserInteractionEnabled:YES];
[_uname setKeyboardType:UIKeyboardTypeDefault];
[_uname setReturnKeyType:UIReturnKeyNext]; //键盘下一步Next
[_uname setAutocapitalizationType:UITextAutocapitalizationTypeNone]; //关闭首字母大写
[_uname setAutocorrectionType:UITextAutocorrectionTypeNo];
[_uname setReturnKeyType:UIReturnKeyNext]; //下一个Passwd
[_uname becomeFirstResponder]; //默认打开键盘
[_uname setFont:[UIFont systemFontOfSize:17]];
[_uname setDelegate:self];
[_uname setText:@""];
[_uname setHighlighted:YES];
[_view addSubview:_uname];
//密码
UILabel *_passwdLab = [[UILabel alloc] initWithFrame:CGRectMake(20, 43, 45, 40)];
[_passwdLab setText:@"密 码"];
[_passwdLab setFont:lpFont];
_passwdLab.highlighted = YES;
_passwdLab.highlightedTextColor = [UIColor blackColor];
[_passwdLab setBackgroundColor:[UIColor clearColor]];
[_passwdLab setTextColor:[UIColor blackColor]];
[_view addSubview:_passwdLab];
[_passwdLab release];
_passwd = [[UITextField alloc] initWithFrame:CGRectMake(padx, 53, 200, 40)];
[_passwd setBackgroundColor:[UIColor clearColor]];
[_passwd setKeyboardType:UIKeyboardTypeDefault];
[_passwd setBorderStyle:UITextBorderStyleNone];
[_passwd setAutocapitalizationType:UITextAutocapitalizationTypeNone]; //关闭首字母大写
[_passwd setReturnKeyType:UIReturnKeyNext]; //下一个Email
[_passwd setSecureTextEntry:YES]; //验证
[_passwd setDelegate:self];
[_passwd setTag:102];
[_passwd setTextColor:[UIColor grayColor]];
[_passwd setFont:lpFont];
[_passwd setText:@""];
[_view addSubview:_passwd];
//邮箱与密码中间分割线
UIView *lineTow = [[UIView alloc] initWithFrame:CGRectMake(10, 95, 300, 1)];
[lineTow setBackgroundColor:[UIColor colorWithRed:209.0f/255.0f green:209.0f/255.0f
blue:209.0f/255.0f alpha:1.0f]];
[self.view addSubview:lineTow];
[lineTow release];
//用户邮箱
UILabel *_emailLab = [[UILabel alloc] initWithFrame:CGRectMake(20, 82, 280, 40)];
[_emailLab setText:@"电子邮箱"];
_emailLab.highlighted = YES;
_emailLab.highlightedTextColor = [UIColor blackColor];
[_emailLab setFont:lpFont];
[_emailLab setBackgroundColor:[UIColor clearColor]];
[_emailLab setTextColor:[UIColor blackColor]];
[_view addSubview:_emailLab];
[_emailLab release];
_email = [[UITextField alloc] initWithFrame:CGRectMake(padx, 92, 200, 40)];
[_email setBackgroundColor:[UIColor clearColor]];
[_email setKeyboardType:UIKeyboardTypeEmailAddress];
[_email setTextColor:[UIColor grayColor]];
[_email setTag:103];
[_email setReturnKeyType:UIReturnKeyDone]; //键盘下一步Next
[_email setAutocapitalizationType:UITextAutocapitalizationTypeNone]; //关闭首字母大写
[_email setAutocorrectionType:UITextAutocorrectionTypeNo];
[_email setFont:[UIFont systemFontOfSize:17]];
[_email setDelegate:self];
[_email setPlaceholder:@"devdiy@example.com"];
[_email setText:@""];
[_email setHighlighted:YES];
[_view addSubview:_email];
}
//创建输入框
- (void)addInputTow
{
//基本参数定义
CGFloat padx = 100.0f;
_vFrame = CGRectMake(10, 10, 300, 125);
UIFont *lpFont = [UIFont boldSystemFontOfSize:16];
//宝贝小名、宝贝性别、宝贝生日背景颜色设置
_view = [[UIView alloc] initWithFrame:_vFrame];
_view.layer.cornerRadius = 8.0;
_view.layer.borderWidth = 1;
_view.layer.borderColor = [UIColor colorWithRed:209.0f/255.0f green:209.0f/255.0f
blue:209.0f/255.0f alpha:1.0f].CGColor;
[_view setBackgroundColor:[UIColor colorWithRed:247.0f/255.0f green:247.0f/255.0f
blue:247.0f/255.0f alpha:1.0f]];
[self.view addSubview:_view];
[_view release];
//宝贝小名和宝贝性别分割线
UIView *lineOne = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 300, 1)];
[lineOne setBackgroundColor:[UIColor colorWithRed:209.0f/255.0f green:209.0f/255.0f
blue:209.0f/255.0f alpha:1.0f]];
[self.view addSubview:lineOne];
[lineOne release];
//宝贝小名
UILabel *_nicknameLab = [[UILabel alloc] initWithFrame:CGRectMake(20, 2, 75, 40)];
[_nicknameLab setText:@"宝贝小名"];
_nicknameLab.highlighted = YES;
_nicknameLab.highlightedTextColor = [UIColor blackColor];
[_nicknameLab setFont:lpFont];
[_nicknameLab setBackgroundColor:[UIColor clearColor]];
[_nicknameLab setTextColor:[UIColor blackColor]];
[_view addSubview:_nicknameLab];
[_nicknameLab release];
_nickname = [[UITextField alloc] initWithFrame:CGRectMake(padx, 13, 180, 40)];
[_nickname setBackgroundColor:[UIColor clearColor]];
[_nickname setTag:101];
[_nickname setUserInteractionEnabled:YES];
[_nickname setKeyboardType:UIKeyboardTypeDefault];
[_nickname setReturnKeyType:UIReturnKeyNext]; //键盘下一步Next
[_nickname setAutocapitalizationType:UITextAutocapitalizationTypeNone]; //关闭首字母大写
[_nickname setAutocorrectionType:UITextAutocorrectionTypeNo];
[_nickname setReturnKeyType:UIReturnKeyNext]; //下一个宝贝性别
[_nickname becomeFirstResponder]; //默认打开键盘
[_nickname setFont:[UIFont systemFontOfSize:17]];
[_nickname setDelegate:self];
[_nickname setText:@""];
[_nickname setHighlighted:YES];
[_view addSubview:_nickname];
//宝贝性别
UILabel *_sexLab = [[UILabel alloc] initWithFrame:CGRectMake(20, 35, 75, 50)];
[_sexLab setText:@"宝贝性别"];
[_sexLab setFont:lpFont];
_sexLab.highlighted = YES;
_sexLab.highlightedTextColor = [UIColor blackColor];
[_sexLab setBackgroundColor:[UIColor clearColor]];
[_sexLab setTextColor:[UIColor blackColor]];
[_view addSubview:_sexLab];
[_sexLab release];
_segment = [[UISegmentedControl alloc] initWithItems:
[NSArray arrayWithObjects:
@"男",@"女",
nil]];
_segment.frame = CGRectMake(padx+10, 56, 130, 32);
_segment.segmentedControlStyle = UISegmentedControlStylePlain;
_segment.selectedSegmentIndex = 1;
[self.view addSubview:_segment];
[_segment release];
//宝贝性别与宝贝生日中间分割线
UIView *lineTow = [[UIView alloc] initWithFrame:CGRectMake(10, 93, 300, 1)];
[lineTow setBackgroundColor:[UIColor colorWithRed:209.0f/255.0f green:209.0f/255.0f
blue:209.0f/255.0f alpha:1.0f]];
[self.view addSubview:lineTow];
[lineTow release];
//宝贝生日
UILabel *_birthLab = [[UILabel alloc] initWithFrame:CGRectMake(30, 96, 75, 40)];
[_birthLab setText:@"宝贝生日"];
_birthLab.highlighted = YES;
_birthLab.highlightedTextColor = [UIColor blackColor];
[_birthLab setFont:lpFont];
[_birthLab setBackgroundColor:[UIColor clearColor]];
[_birthLab setTextColor:[UIColor blackColor]];
[self.view addSubview:_birthLab];
[_birthLab release];
_birthDay = [[UIButton alloc] initWithFrame:CGRectMake(57, 96, 200, 40)];
[_birthDay setBackgroundColor:[UIColor clearColor]];
[_birthDay setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[_birthDay setTitle:@"2004-10-09" forState:UIControlStateNormal];
[_birthDay setTag:104];
[_birthDay addTarget:self action:@selector(openBirthday)
forControlEvents:UIControlEventTouchUpInside];
[_birthDay setHighlighted:YES];
[self.view addSubview:_birthDay];
//宝贝信息提示
UILabel *_babyNote = [[UILabel alloc] initWithFrame:CGRectMake(45, 131, 300, 40)];
[_babyNote setBackgroundColor:[UIColor clearColor]];
[_babyNote setTextColor:[UIColor colorWithRed:83.0f/255.0f green:92.0f/255.0f blue:112.0f/255.0f
alpha:1.0f]];
[_babyNote setTag:104];
[_babyNote setFont:[UIFont systemFontOfSize:14]];
[_babyNote setText:@"推荐引擎会根据孩子信息进行个性推荐"];
[_babyNote setHighlighted:YES];
[self.view addSubview:_babyNote];
[_babyNote release];
//初始日期选择控件
_datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0.0, 200.0, 0.0, 0.0)];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
//将当前生日时间设置到日期轮轴上
_datePicker.date = [dateFormatter dateFromString:_birthDay.titleLabel.text];
//设置为中文显示
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
_datePicker.locale = locale;
[locale release];
[_datePicker setDatePickerMode:UIDatePickerModeDate];
[_datePicker addTarget:self action:@selector(dataValueChanged)
forControlEvents:UIControlEventValueChanged];
[self.view addSubview:_datePicker];
}
如果以上的代码不够详细,你可以在百度搜索“IOS开发 登录注册功能”,查看更为详细的信息。
另外,当我把这款问医生的APP给我们负责IOS开发的程序员查看的时候,他的第一反应是界面很美观。如果做安卓或者是IOS开发的想要参考一些好看尤其是在线交流的页面,可以参考整形美容、餐饮预订或者是这一款问医生的APP。
在客户给的参考应用中,界面有个非常美观的地方,在免费咨询医生问题后一般的UI设计都是在回答问题的下方,设置客户留言的版块,但是在参考应用中,他是类似于淘宝,将医生的回答和浏览者的评价是以左右两侧导航栏的形式实现的。很多设计的人会提出,你再好的设计也要遵循浏览者的习惯性浏览方式,但是笔者认为,能使用APP的人目前年龄层不会太大,本来这个东西就是新鲜的,你的设计就会慢慢培养客户的习惯。具体的做法如下:
将SideNav设计成一个ViewController控件,用来管理控制LeftVC,RootVC,RightVC这3个ViewController;重置内容页即rootViewController的NavBar,Setter入内容,左,右侧导航栏控制器。如只是SetLeft,那么只会显示左侧按钮;本身自带一个View,因为SideNav本身也是一个ViewController,在默认set了RootViewController时(或者说是内容ViewController),将RootViewController的View依附到SideNav的View上面;点击左侧菜单控制界面的某个菜单按钮跳转切换,以前看到的一个代码例子类似是使用了全局控制器的思路,可考虑使用委托来实现或者直接根据Appdelegate拿到SideNavVC的对象来操作。
这个的实现相较于注册难度要大很多在IOS开发中,但是这两个功能的实现是在APP开发中是最常见的。基本上都会有这样的功能要求。在这篇文章中,以客户案例为例,就是让大家更直观地了解在IOS开发案例,切换的两侧导航和注册功能实现的具体做法。