心有思

学而不思则罔,思而不学则殆


  • 首页

  • 分类

  • 归档

  • 标签

  • 搜索

UIButton设置了UIControlStateSelected和UIControlStateHighlighted状态的图片点击会闪烁的解决方案

发表于 2013-06-27 | 分类于 ios

通过代码增加如下设置:

1
2
[btn setBackgroundImage:img1 forState:UIControlStateSelected|UIControlStateHighlighted];
[btn setImage:img2 forState:UIControlStateSelected|UIControlStateHighlighted];

注: 在界面设计器中无法设置。

iOS开发陷阱之NSString - compare

发表于 2013-01-26 | 分类于 ios

NSString有多个compare相关方法:

1
2
3
4
- (NSComparisonResult)compare:(NSString *)string;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(id)locale;

NSComparisonResult 是定义的一个枚举,定义如下:

1
typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};

其中,NSOrderedSame 表示比较的两个字符串完全一致, 同时,在这个枚举中,它的值是 0.

阅读全文 »

iOS全局处理键盘事件

发表于 2013-01-22 | 分类于 ios

注册监听键盘事件的通知

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardShow:)
name:UIKeyboardDidShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardHide:)
name:UIKeyboardDidHideNotification
object:nil];

在键盘将要出现和隐藏的回调中,加入动画

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
- (void)keyboardWillShow:(NSNotification *)notif {
if (self.hidden == YES) {
return;
}
CGRect rect = [[notif.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat y = rect.origin.y;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.25];
NSArray *subviews = [self subviews];
for (UIView *sub in subviews) {
CGFloat maxY = CGRectGetMaxY(sub.frame);
if (maxY > y - 2) {
sub.center = CGPointMake(CGRectGetWidth(self.frame)/2.0, sub.center.y - maxY + y - 2);
}
}
[UIView commitAnimations];
}
- (void)keyboardShow:(NSNotification *)notif {
if (self.hidden == YES) {
return;
}
}
- (void)keyboardWillHide:(NSNotification *)notif {
if (self.hidden == YES) {
return;
}
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.25];
NSArray *subviews = [self subviews];
for (UIView *sub in subviews) {
if (sub.center.y < CGRectGetHeight(self.frame)/2.0) {
sub.center = CGPointMake(CGRectGetWidth(self.frame)/2.0, CGRectGetHeight(self.frame)/2.0);
}
}
[UIView commitAnimations];
}
- (void)keyboardHide:(NSNotification *)notif {
if (self.hidden == YES) {
return;
}
}

iOS/Objective-C 开发常用代码(1)

发表于 2012-12-16 | 分类于 ios

判断iOS设备是否是iPad

1
#define IS_IPAD ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] && [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)

iOS中URL编码

1
2
NSString* escapedURLString = [unescapedString
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

或

1
2
3
NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes
(NULL, (CFStringRef)yourtext, NULL,
(CFStringRef)@”!*’();:@&=+$,/?%#[]“, kCFStringEncodingUTF8);

iOS中不定参数(可变参数)的方法

常见于NSArray初始化方法中,比如:

1
2
3
4
5
@interface NSArray (NSArrayCreation)
+ (id)arrayWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
- (id)initWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
//...
@end

NS_REQUIRES_NIL_TERMINATION 是一个宏,用于编译时非nil结尾的检查。自定义不定参数的方法与C/C++一样,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- (id)initWithColumns: (NSString*)firstColumnName, ... {
if (self = [self init]) {
NSMutableArray* arrays = [NSMutableArray array];
va_list argList;
if (firstColumnName) {
[arrays addObject:firstColumnName];
va_start(argList, firstColumnName);
id arg;
while ((arg = va_arg(argList, id))) {
[arrays addObject:arg];
}
}
self.columnNames = [NSArray arrayWithArray:arrays];
}
return self;
}

NSDateFormatter格式详细列表一览

发表于 2012-10-29 | 分类于 ios

前言

iOS开发中NSDateFormatter是一个很常用的类,用于格式化NSDate对象,支持本地化的信息。与时间相关的功能还可能会用到NSDateComponents类和NSCalendar类等。本文主要列出NSDateFormatter常见用法。
NSDate对象包含两个部分,日期(Date)和时间(Time)。格式化的时间字符串主要也是针对日期和时间的。[以下代码中开启了ARC,所以没有release。]

阅读全文 »
1…45
Xinus

Xinus

33 日志
9 分类
39 标签
Links
  • Swift.org
© 2012 - 2017 Xinus