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>
最后,去浏览器,输入网址,即可。