UITextField 属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
titleTextField.becomeFirstResponder() 设置为第一响应者
/初始化textfield并设置位置及大小
UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)];
//设置边框样式,只有设置了才会显示边框样式
text.borderStyle = UITextBorderStyleRoundedRect;
typedef enum {
UITextBorderStyleNone,
UITextBorderStyleLine,
UITextBorderStyleBezel,
UITextBorderStyleRoundedRect
} UITextBorderStyle;
//设置输入框的背景颜色,此时设置为白色 如果使用了自定义的背景图片边框会被忽略掉
text.backgroundColor = [UIColor whiteColor];
//设置背景
text.background = [UIImage imageNamed:@"dd.png"];
//设置背景
text.disabledBackground = [UIImage imageNamed:@"cc.png"];
//当输入框没有内容时,水印提示 提示内容为password
text.placeholder = @"password";
//设置输入框内容的字体样式和大小
text.font = [UIFont fontWithName:@"Arial" size:20.0f];
//设置字体颜色
text.textColor = [UIColor redColor];
//输入框中是否有个叉号,在什么时候显示,用于一次性删除输入框中的内容
text.clearButtonMode = UITextFieldViewModeAlways;
typedef enum {
UITextFieldViewModeNever, 重不出现
UITextFieldViewModeWhileEditing, 编辑时出现
UITextFieldViewModeUnlessEditing, 除了编辑外都出现
UITextFieldViewModeAlways 一直出现
} UITextFieldViewMode;
//输入框中一开始就有的文字
text.text = @"一开始就在输入框的文字";
//每输入一个字符就变成点 用语密码输入
text.secureTextEntry = YES;
//是否纠错
text.autocorrectionType = UITextAutocorrectionTypeNo;
typedef enum {
UITextAutocorrectionTypeDefault, 默认
UITextAutocorrectionTypeNo, 不自动纠错
UITextAutocorrectionTypeYes, 自动纠错
} UITextAutocorrectionType;
//再次编辑就清空
text.clearsOnBeginEditing = YES;
//内容对齐方式
text.textAlignment = UITextAlignmentLeft;
//内容的垂直对齐方式 UITextField继承自UIControl,此类中有一个属性contentVerticalAlignment
text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
//设置为YES时文本会自动缩小以适应文本窗口大小.默认是保持原来大小,而让长文本滚动
textFied.adjustsFontSizeToFitWidth = YES;
//设置自动缩小显示的最小字体大小
text.minimumFontSize = 20;
//设置键盘的样式
text.keyboardType = UIKeyboardTypeNumberPad;
typedef enum {
UIKeyboardTypeDefault, 默认键盘,支持所有字符
UIKeyboardTypeASCIICapable, 支持ASCII的默认键盘
UIKeyboardTypeNumbersAndPunctuation, 标准电话键盘,支持+*#字符
UIKeyboardTypeURL, URL键盘,支持.com按钮 只支持URL字符
UIKeyboardTypeNumberPad, 数字键盘
UIKeyboardTypePhonePad, 电话键盘
UIKeyboardTypeNamePhonePad, 电话键盘,也支持输入人名
UIKeyboardTypeEmailAddress, 用于输入电子 邮件地址的键盘
UIKeyboardTypeDecimalPad, 数字键盘 有数字和小数点
UIKeyboardTypeTwitter, 优化的键盘,方便输入@、#字符
UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable,
} UIKeyboardType;
//首字母是否大写
text.autocapitalizationType = UITextAutocapitalizationTypeNone;
typedef enum {
UITextAutocapitalizationTypeNone, 不自动大写
UITextAutocapitalizationTypeWords, 单词首字母大写
UITextAutocapitalizationTypeSentences, 句子的首字母大写
UITextAutocapitalizationTypeAllCharacters, 所有字母都大写
} UITextAutocapitalizationType;
//return键变成什么键
text.returnKeyType =UIReturnKeyDone;
typedef enum {
UIReturnKeyDefault, 默认 灰色按钮,标有Return
UIReturnKeyGo, 标有Go的蓝色按钮
UIReturnKeyGoogle,标有Google的蓝色按钮,用语搜索
UIReturnKeyJoin,标有Join的蓝色按钮
UIReturnKeyNext,标有Next的蓝色按钮
UIReturnKeyRoute,标有Route的蓝色按钮
UIReturnKeySearch,标有Search的蓝色按钮
UIReturnKeySend,标有Send的蓝色按钮
UIReturnKeyYahoo,标有Yahoo的蓝色按钮
UIReturnKeyYahoo,标有Yahoo的蓝色按钮
UIReturnKeyEmergencyCall, 紧急呼叫按钮
} UIReturnKeyType;
//键盘外观
textView.keyboardAppearance=UIKeyboardAppearanceDefault
typedef enum {
UIKeyboardAppearanceDefault, 默认外观,浅灰色
UIKeyboardAppearanceAlert, 深灰 石墨色
} UIReturnKeyType;
//设置代理 用于实现协议
text.delegate = self;
//把textfield加到视图中
[self.window addSubview:text];
//最右侧加图片是以下代码 左侧类似
UIImageView *image=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"right.png"]];
text.rightView=image;
text.rightViewMode = UITextFieldViewModeAlways;
typedef enum {
UITextFieldViewModeNever,
UITextFieldViewModeWhileEditing,
UITextFieldViewModeUnlessEditing,
UITextFieldViewModeAlways
} UITextFieldViewMode;
//按return键键盘往下收 becomeFirstResponder
类要采用UITextFieldDelegate协议
text.delegate = self; 声明text的代理是我,我会去实现把键盘往下收的方法 这个方法在UITextFieldDelegate里所以我们要采用UITextFieldDelegate这个协议
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[text resignFirstResponder]; //主要是[receiver resignFirstResponder]在哪调用就能把receiver对应的键盘往下收
return YES;
}
重写绘制行为
除了UITextField对象的风格选项,你还可以定制化UITextField对象,为他添加许多不同的重写方法,来改变文本字段的显示行为。这些方法都会返回一个CGRect结构,制定了文本字段每个部件的边界范围。以下方法都可以重写。
– textRectForBounds:   //重写来重置文字区域
– drawTextInRect:   //改变绘文字属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.
– placeholderRectForBounds:  //重写来重置占位符区域
– drawPlaceholderInRect:  //重写改变绘制占位符属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.
– borderRectForBounds:  //重写来重置边缘区域
– editingRectForBounds:  //重写来重置编辑区域
– clearButtonRectForBounds:  //重写来重置clearButton位置,改变size可能导致button的图片失真
– leftViewRectForBounds:
– rightViewRectForBounds:
委托方法
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
//返回一个BOOL值,指定是否循序文本字段开始编辑
return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
//开始编辑时触发,文本字段将成为first responder
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
//返回BOOL值,指定是否允许文本字段结束编辑,当编辑结束,文本字段会让出first responder
//要想在用户结束编辑时阻止文本字段消失,可以返回NO
//这对一些文本字段必须始终保持活跃状态的程序很有用,比如即时消息
return NO;
}
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
//当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。
//这对于想要加入撤销选项的应用程序特别有用
//可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。
//要防止文字被改变可以返回NO
//这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中
return YES;
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{
//返回一个BOOL值指明是否允许根据用户请求清除内容
//可以设置在特定条件下才允许清除内容
return YES;
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
//返回一个BOOL值,指明是否允许在按下回车键时结束编辑
//如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起[textField resignFirstResponder];
//查一下resign这个单词的意思就明白这个方法了
return YES;
}
通知
UITextField派生自UIControl,所以UIControl类中的通知系统在文本字段中也可以使用。除了UIControl类的标准事件,你还可以使用下列UITextField类特有的事件
UITextFieldTextDidBeginEditingNotification
UITextFieldTextDidChangeNotification
UITextFieldTextDidEndEditingNotification
当文本字段退出编辑模式时触发。通知的object属性存储了最终文本。
因为文本字段要使用键盘输入文字,所以下面这些事件发生时,也会发送动作通知
UIKeyboardWillShowNotification //键盘显示之前发送
UIKeyboardDidShowNotification //键盘显示之后发送
UIKeyboardWillHideNotification //键盘隐藏之前发送
UIKeyboardDidHideNotification //键盘隐藏之后发送
UITextField 限制输入字数
UITextField 限制输入字数
方法一
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if (range.location>= 11)
return NO;
returnYES;
}
方法二
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (toBeString.length > 11) {
textField.text = [toBeString substringToIndex:11];
return NO;
}
returnYES;
}
当前光标位置 range.location
已选文字长度 range.length
输入文字长度 textView.text.length
已有文字长度 text.length
————mark 消息机制侦听更改 ----
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textFieldChanged:)
name:UITextFieldTextDidChangeNotification
object:textField];
searchText = UITextField(frame: CGRect(x: interval_W, y: logoImageView.center.y+logoImageView.bounds.height*1.5, width: stageWidth*(500/640), height: stageWidth*(70/640)))
searchText.layer.borderColor = violetColor.CGColor
searchText.layer.borderWidth = 1.0
searchText.layer.masksToBounds = true
searchText.placeholder = " 请输入舞曲或者舞队名称"
searchText.addTarget(self, action: "searchTextChange:", forControlEvents: UIControlEvents.EditingChanged)
searchimage = UIImageView(image: UIImage(named: "ser_serch.png"))
searchimage.center.x = searchimage.bounds.width
searchimage.center.y = searchText.bounds.height/2//searchimage.bounds.height/2
searchText.addSubview(searchimage)
searchText.delegate = self
searchText.clearButtonMode = UITextFieldViewMode.Always
searchText.returnKeyType = UIReturnKeyType.Search
self.view.addSubview(searchText)
-----
func searchTextChange(text:UITextField){
if text.text == nil || text.text == ""{
searchimage.hidden = false
}else{
searchimage.hidden = true
}
}
全局的取消键盘响应者
- (IBAction)View_TouchDown:(id)sender {
// 发送resignFirstResponder.
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
}
UIApplication.sharedApplication().sendAction("resignFirstResponder", to: nil, from: nil, forEvent: nil)

UITextField的placeholder文字的位置,颜色等的自定义设置

From: https://www.jianshu.com/p/615145fe3801

首先想到的是如果系统默认的没有能改变的,那就自定义添加不同的重写该控件的方法

我们有时需要定制化UITextField对象的风格,可以添加许多不同的重写方法,来改变文本字段的显示行为。这些方法都会返回一个CGRect结构,制定了文本字段每个部件的边界范围,甚至修改placeHolder颜色,字体。

– textRectForBounds:   //重写来重置文字区域

– drawTextInRect:   //改变绘文字属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.

– placeholderRectForBounds:  //重写来重置占位符区域

– drawPlaceholderInRect:  //重写改变绘制占位符属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了

– borderRectForBounds:  //重写来重置边缘区域

– editingRectForBounds:  //重写来重置编辑区域

– clearButtonRectForBounds:  //重写来重置clearButton位置,改变size可能导致button的图片失真

– leftViewRectForBounds:

– rightViewRectForBounds:

通过– drawPlaceholderInRect:方法可改变placeHolder颜色、字体,请看代码:
首先定义一个类CustomTextField让它继承UITextField实现以下方法即可:

//控制清除按钮的位置
-(CGRect)clearButtonRectForBounds:(CGRect)bounds {
   return CGRectMake(bounds.origin.x + bounds.size.width - 50, bounds.origin.y + bounds.size.height -20, 16, 16);
}


//控制placeHolder的位置,左右缩20
-(CGRect)placeholderRectForBounds:(CGRect)bounds {

    //return CGRectInset(bounds, 20, 0);
   CGRect inset = CGRectMake(bounds.origin.x+100, bounds.origin.y, bounds.size.width -10, bounds.size.height);//更好理解些
   return inset;
}


//控制显示文本的位置
-(CGRect)textRectForBounds:(CGRect)bounds {
    //return CGRectInset(bounds, 50, 0);
    CGRect inset = CGRectMake(bounds.origin.x+190, bounds.origin.y, bounds.size.width -10, bounds.size.height);//更好理解些
    return inset;
}


//控制编辑文本的位置
-(CGRect)editingRectForBounds:(CGRect)bounds {
    //return CGRectInset( bounds, 10 , 0 );
   CGRect inset = CGRectMake(bounds.origin.x +10, bounds.origin.y, bounds.size.width -10, bounds.size.height);
   return inset;
}


//控制左视图位置
- (CGRect)leftViewRectForBounds:(CGRect)bounds {
   CGRect inset = CGRectMake(bounds.origin.x +10, bounds.origin.y, bounds.size.width-250, bounds.size.height);
   return inset;
    //return CGRectInset(bounds,50,0);
}


//控制placeHolder的颜色、字体
- (void)drawPlaceholderInRect:(CGRect)rect
{
    //CGContextRef context = UIGraphicsGetCurrentContext();
    //CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor);
    [[UIColororangeColor] setFill];

    [[selfplaceholder] drawInRect:rectwithFont:[UIFontsystemFontOfSize:20]];
}

//下面是使用CustomTextField的代码,可放在viewDidLoad等方法中
_textField = [[CustomTextField alloc] initWithFrame:CGRectMake(20, 150, 280, 30)];
_textField.placeholder = @”手机号”;
_textField.borderStyle = UITextBorderStyleRoundedRect;
_textField.textAlignment = UITextAlignmentLeft;
_textField.delegate = self;
_textField.clearButtonMode = UITextFieldViewModeWhileEditing;
//_textField.text = @”随便”;
UIImageView *imgv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@”anyImage.png”]];
_textField.leftView = imgv;
_textField.leftViewMode = UITextFieldViewModeAlways;
[self.view addSubview:_textField];

IOS 运作处理器数据的获取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
——————————————————iOS 运作处理器数据的获取 —————步数获取------------------
UILabel *label =[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 320, 568/2)];
[label setBackgroundColor:[UIColor grayColor]]; label.textColor =[UIColor redColor];
label.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:label];
if ([CMStepCounter isStepCountingAvailable])
{
NSLog(@"isStepCountingAvailable!!!");
NSOperationQueue *queueStep = [[NSOperationQueue alloc] init] ; //20步数,更新一次
[_cmStepCounter startStepCountingUpdatesToQueue:queueStep updateOn:20 withHandler:^(NSInteger numberOfSteps, NSDate *timestamp, NSError *error) { NSLog(@"numberOfSteps==%ld,timestamp==%@",(long)numberOfSteps,timestamp);
_steps = numberOfSteps;
label.text = [NSString stringWithFormat:@"%ld",_steps];
}];
}else{
NSLog(@"isNOT StepCountingAvailable");
}
- (IBAction)doSomeThingsAction:(id)sender {
__block NSInteger stepsNumber = 0;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *tempDate = [dateFormatter dateFromString:@"2014-08-31 20:20:20"];
NSOperationQueue *queueStep = [[NSOperationQueue alloc] init] ;
[_stepManager queryStepCountStartingFrom:tempDate to:[NSDate date] toQueue:queueStep withHandler:^(NSInteger numberOfSteps, NSError *error)
{
if (!error)
{
stepsNumber = numberOfSteps;
dispatch_async(dispatch_get_main_queue(), ^{
self.countLabel.text = [NSString stringWithFormat:@"%ld",stepsNumber];
});
}else{
NSLog(@"%@",error);
} }];
[_activityManager queryActivityStartingFromDate:tempDate toDate:[NSDate date] toQueue:queueStep withHandler:^(NSArray *activities, NSError *error) {
if (!error) {
dispatch_async(dispatch_get_main_queue(), ^{ CMMotionActivity *tempActivity = [activities objectAtIndex:0]; NSLog(@"%@",tempActivity);
});
}else{ NSLog(@"%@",error); } }]; }
————2
在ios8中,ios7新增加的计步器CMStepCounter已经过时,而用CMPedometer代替。
具体代码(CMStepCounter)
if ([CMStepCounterisStepCountingAvailable]) {
self.stepCounter=[[CMStepCounter alloc]init];
NSOperationQueue *queue=[[NSOperationQueue alloc]init];
[self.stepCounter startStepCountingUpdatesToQueue:queue updateOn:5 withHandler:^(NSInteger numberOfSteps, NSDate *_Nonnull timestamp, NSError * _Nullable error) {
self.stepLabel.text=[NSString stringWithFormat:@"用户已经行走了【%d】步!",numberOfSteps];
}];
}
(CMPedometer)
if ([CMPedometer isStepCountingAvailable]) {
self.pedometer=[[CMPedometer alloc]init];
[self.pedometer startPedometerUpdatesFromDate:[NSDate date] withHandler:^(CMPedometerData *_Nullable pedometerData, NSError * _Nullable error) {
CMPedometerData *data=(CMPedometerData *)pedometerData;
NSNumber *number=data.numberOfSteps;
self.stepLabel.text=[NSString stringWithFormat:@"用户已经行走了【%@】步!",number];
}];
}
————————————————可以实现的时间间隔 获取步数 --------
//ios8
if
([CMStepCounter
isStepCountingAvailable])
{
CMStepCounter* stepCounter=[[CMStepCounter alloc]init];
NSOperationQueue *queue=[[NSOperationQueue alloc]init];
NSDate * newdate = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSUIntegerMax fromDate:newdate];
components.hour = 0;
components.minute = 0;
components.second = 0;
// components.nanosecond = 0 not available in iOS
NSTimeInterval ts = (double)(int)[[calendar dateFromComponents:components] timeIntervalSince1970];
NSDate * olddate = [NSDate dateWithTimeIntervalSince1970:ts];//[NSDate dateWithTimeInterval:-24*60*60
// 时间间隔获取步数
[stepCounter queryStepCountStartingFrom:olddate to:newdate toQueue:queue withHandler:^(NSInteger numberOfSteps, NSError * _Nullable error) {
NSLog(@"3行走了多少步%ld",(long)numberOfSteps)//成功, 时间转换下正常就可以
}];
// [stepCounter startStepCountingUpdatesToQueue:queue updateOn:5 withHandler:^(NSInteger numberOfSteps, NSDate * _Nonnull timestamp, NSError * _Nullable error) {
//
// NSLog(@"2行走了多少步%ld",(long)numberOfSteps)
//
// }];
}
//ios7
if ([CMPedometer isStepCountingAvailable]) {
CMPedometer* pedometer=[[CMPedometer alloc]init];
NSDate * newdate = [NSDate date];
NSDate * olddate = [NSDate dateWithTimeInterval:-24*60*60 sinceDate:newdate];
// 时间间隔获取步数
[pedometer queryPedometerDataFromDate:olddate toDate:newdate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
CMPedometerData *data=(CMPedometerData *)pedometerData;
NSNumber *number=data.numberOfSteps;
NSLog(@"4行走了多少步%ld",(long)number)
}];
// [pedometer startPedometerUpdatesFromDate:[NSDate date] withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
//
// CMPedometerData *data=(CMPedometerData *)pedometerData;
//
// NSNumber *number=data.numberOfSteps;
//
// NSLog(@"2行走了多少步%ld",(long)number)
//
// }];
}

格式化时间

//格式化时间

1
2
3
4
5
6
7
8
9
10
var formatter:NSTimeInterval = NSTimeInterval()
// formatter.stringForObjectValue(thetime)
formatter = 1420790950.580
var str:NSDate = NSDate(timeIntervalSince1970: formatter)
let df = NSDateFormatter()
df.dateFormat="yyyy-M-d” // yyyy.MM.dd HH:mm:ss
var ti = df.stringFromDate(str)
println(" 222 \(ti)")

格式化时间

//格式化时间

1
2
3
4
5
6
7
8
9
10
var formatter:NSTimeInterval = NSTimeInterval()
// formatter.stringForObjectValue(thetime)
formatter = 1420790950.580
var str:NSDate = NSDate(timeIntervalSince1970: formatter)
let df = NSDateFormatter()
df.dateFormat="yyyy-M-d” // yyyy.MM.dd HH:mm:ss
var ti = df.stringFromDate(str)
println(" 222 \(ti)")

硬盘容量获取

swift 3.0

1
2
3
4
5
6
7
8
9
let size = fileManager[FileAttributeKey.systemFreeSize] as! Double //文件系统的大小
let freeSize = fileManager[FileAttributeKey.systemFreeSize] as! Double
freeSize.distance(to: 2)
let sizeGB = size / 1024 / 1024 / 1024
let freeSizeGB = freeSize / 1024 / 1024 / 1024
let sizeGBstr = String(format: "%0.2f", sizeGB)
let freeSizeGBstr = String(format: "%0.2f", freeSizeGB)
diskSpace.text = " 系统总空间 \(sizeGBstr)G. 剩余可用 \(freeSizeGBstr)G"

swift 2.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func diskmessage(){
let fileManager:NSDictionary = NSFileManager.defaultManager().attributesOfFileSystemForPath(NSHomeDirectory(), error: nil)!
let size = fileManager.objectForKey(NSFileSystemSize) as Double //文件系统的大小
let freeSize = fileManager.objectForKey(NSFileSystemFreeSize) as Double
freeSize.distanceTo(2)
let sizeGB = size / 1024 / 1024 / 1024
let freeSizeGB = freeSize / 1024 / 1024 / 1024
let sizeGBstr = String(format: "%0.2f", sizeGB)//保留两位小数
diskSpace.text = " 系统总空间 \(sizeGBstr)G. 剩余可用 \(freeSizeGB)G"
//println("总大小\(size)空闲剩余\(freeSize)")
}

获取剪切板数据

UIPasteboard.generalPasteboard() 是获取剪切板数据的,

UIViewController初始化注意

UIViewController 初始化注意
如果是在init 函数中调用了self.view (原理是自动调用viewDidLoad) 就会先执行 viewDidLoad 如果没有的话 是先执行init

获取image 实际的像素值-

———————————获取image 实际的像素值——————–

1
2
3
let image = UIImage(named: "foot_me”) //图是取2x 的图 是40*40 image?.size.width得到是20*20 1x 尺寸
let size = CGSizeMake(CGFloat(CGImageGetWidth(image!.CGImage)), CGFloat(CGImageGetHeight(image!.CGImage)))
let image_W = size.width// 这个是实际的图片的宽度

swift md5

swift3 对类型检查严格了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/// 返回md5 32位小写
var MD5:String {
let cString = self.cString(using: String.Encoding.utf8)
let length = CUnsignedInt(
self.lengthOfBytes(using: String.Encoding.utf8)
)
//let result = UnsafeMutablePointer<CUnsignedChar>(allocatingCapacity: Int(CC_MD5_DIGEST_LENGTH))
let result:UnsafeMutablePointer<CUnsignedChar> = UnsafeMutablePointer.allocate(capacity: (Int(CC_MD5_DIGEST_LENGTH)))
CC_MD5(cString!,length,result)
return String(format:"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
result[0],result[1],result[2],result[3],result[4],result[5],result[6],result[7],result[8],
result[9],result[10],result[11],result[12],result[13],result[14],result[15])
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 加密系统头
*/
#import <CommonCrypto/CommonDigest.h> 桥接头文件加入
extension String{
/// 返回md5 32位小写
var MD5:String {
let cString = self.cStringUsingEncoding(NSUTF8StringEncoding)
let length = CUnsignedInt(
self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
)
let result = UnsafeMutablePointer<CUnsignedChar>.alloc(Int(CC_MD5_DIGEST_LENGTH))
CC_MD5(cString!,length,result)
return String(format:"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
result[0],result[1],result[2],result[3],result[4],result[5],result[6],result[7],result[8],
result[9],result[10],result[11],result[12],result[13],result[14],result[15])
}
}

oc 版本 头文件 <CommonCrypto/CommonDigest.h>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// md5 小写
- (NSString *)MD5{
const char *cStr = [self UTF8String];
unsigned char result[16];
CC_MD5(cStr, (unsigned)strlen(cStr), result);
return [NSString stringWithFormat:
@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]];
}

此方法得到的MD5值中的字母为小写,如果想要大写的MD5值,将@”%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x” 中的x替换成X即可