UITextField中处理键盘是一件很麻烦的事情,我的第一个项目中让我费了好大劲。虽然网上的例子很多。细节问题!!!最后高手胡哥一语惊醒梦中人,帮我解决了问题。非常感谢胡哥在我的第一个项目上的帮助。
首先设置代理 在h文件中要继承 UIViewController<UITextFieldDelegate>
然后要定义一个全局变量 CGRect fieldRect;
//本方法为当键盘弹出时,若将文本框遮盖,uiview将会上移。
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
fieldRect = self.view.frame; //本句将是本文章的靓点,此句的意思是 将当前页面的frame赋值给全局变量 fieldRect,方便键盘消失后恢复frame。
CGRect rect = textField.frame;
int offset = rect.origin.y +32 - (self.view.frame.size.height -216.0);//键盘高度216
NSTimeInterval animationDuration = 0.30f;
[UIViewbeginAnimations:@"ResizeForKeyBoard"context:nil];
[UIViewsetAnimationDuration:animationDuration];
float width = self.view.frame.size.width;
float height = self.view.frame.size.height +32;
if(offset > 0)
{
CGRect rect = CGRectMake(0.0f, -offset,width,height);
self.view.frame = rect;
}
[UIViewcommitAnimations];
}
//本方法为当键盘弹出,输入完文本内容后,触摸键盘以外的背景,键盘将会消失。使用本方法需要在增加一个button ,button大小和整个屏幕大小相同。button链接方法为-(IBAction)backgroundTap:(id)sender;
-(IBAction)backgroundTap:(id)sender
{
[phoneNumberresignFirstResponder];
[passwordresignFirstResponder];
[yanzhengmaresignFirstResponder];
self.view.frame =fieldRect;
}
//此方法为当点击键盘上的return键时,键盘将会消失。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSTimeInterval animationDuration = 0.30f;
[UIViewbeginAnimations:@"ResizeForKeyboard"context:nil];
[UIViewsetAnimationDuration:animationDuration];
self.view.frame =fieldRect;
[UIViewcommitAnimations];
[textField resignFirstResponder];
1.什么是UDID
UDID 是由子母和数字组成的40个字符串的序号,用来区别每一个唯一的iOS设备,包括 iPhones, iPads, 以及 iPod touches,这些编码看起来是随机的,实际上是跟硬件设备特点相联系的,另外你可以到iTunes点击查询序列号。
UDID指的是设备的唯一设备识别符,移动广告商和游戏网络运营商往往需要通过UDID用来识别用户,并对用户活动进行跟踪。
2. UDID是用来干什么的?
UDID可以关联其它各种数据到相关设备上。例如,连接到开发者账号,可以允许在发布前让设备安装或测试应用;也可以让开发者获得iOS测试版进行体验。苹果用UDID连接到苹果的ID,这些设备可以自动下载和安装从App Store购买的应用、保存从iTunes购买的音乐、帮助苹果发送推送通知、即时消息。
在iOS 应用早期,UDID被第三方应用开发者和网络广告商用来收集用户数据,可以用来关联地址、记录应用使用习惯……以便推送精准广告
3. UDID漏洞
许多应用程序收集用户数据,例如UDID,许多开发者把UDID跟用户的真实姓名、密码、住址、其它数据关联起来;网络窥探者会从多个应用收集这些数据,然后顺藤摸瓜得到这个人的许多隐私数据
围绕iOS应用程序侵犯用户隐私问题,苹果如今已正式拒绝那些访问用户设备UDID的应用上架App Store。开发商将要对自己的应用做出更新,确定不会访问用户设备UDID后方可上架
4.UDID欺骗
很多工具可以伪造udid,例如udidfaker,一些收费的好工具 插件都会让你试用,这些都是根据你机器唯一的udid来防止你重复使用,这些伪造UDID的软件都是针对一个app伪造一个udid,这个app就会认为这是一台新机器,这样你就可以不断使用一个免费试用的程序了。
很多人都利用伪造UDID来欺骗苹果干点坏事来防止真的UDID被封.
希望和我一样的小白对IOS的基础知识有新的了解.
准备工作
django-admin.py startproject web02 【创建一个web02项目】 django-admin.py startapp blog 【创建一个应用名为blog】 然后在blog下面建立一个文件夹,templates,放置html模板。 python manage.py runserver 【启动django开发服务器】
去settings.py,把刚建立的应用注册进去。
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', )
先配置views.py 视图文件
#encoding:utf8 from django.http import HttpResponse from django.template import loader,Context class Person(object): def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def say(self): return self.name +' '+ str(self.age) +' '+self.sex def index(req): t=loader.get_template('index.html')#加载模板文件 name='tom' age=23 sex='male' title = 'emp' marry = True booklist=['python','php','java'] booktuple=('a','b','c') books={'a':'python','b':'c++'} zhangsan=Person('zhangsan',23,'male') c=Context({ #加载文件里的内容 'name':name, 'age':age, 'sex':sex, 'title':title, 'marry':marry, 'booklist':booklist, 'booktuple':booktuple, 'books':books, 'zhangsan':zhangsan, }) html=t.render(c) #用模板渲染内容 return HttpResponse(html) #返回渲染后的内容 def add(req): #前面index是描述重点,后面这三个是最简单的情况 return HttpResponse('add list') def dele(req): return HttpResponse('delete list') def select(req): return HttpResponse('select list')
再配置urls.py,配置好以后,这几个页面都可以访问了。
#coding:utf8 from django.conf.urls.defaults import patterns, include, url urlpatterns = patterns('', url(r'^blog/index/$','blog.views.index'), #前半如果匹配正则,后半就调用blog包中views模块的index方法 url(r'^blog/add/$','blog.views.add'), url(r'^blog/dele/$','blog.views.dele'), ) urlpatterns += patterns('blog.views', #此处可作为前缀,另外,patterns可叠加 url(r'^blog/select/$','select'), )
这里以index为例,编辑templates文件夹下的index.html文件,重点渲染
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>{{title}}</title> </head> <body> <h1>name is:{{name}}<br /> <!-- 这里的{{双层花括号}}下面的值,在blog.views.index中,c=Context()里面,已经用字典的方式指定好了 --> age is:{{age}}<br /> marry is:{{marry}}<br /> booklist is:{{booklist}}<br /> booktuple is:{{booktuple}}<br /> 1.{{booktuple.0}}<br /> books is{{books}}<br /> 2.{{books.a}}<br /> zhangsan:{{zhangsan}}<br /> 3.{{zhangsan.name}}<br /> 4.{{zhangsan.say}} <!-- 数组列表字典,类的属性和方法,都用点方法来表示 --> </h1> </body> </html>
最后,去浏览器,输入网址,即可。