31-40(PHC文件,UIApplication,Info.plis,监听return按钮,格式化日期,openURL)
31.监听return按钮
32.自动滚动表格到最后一行
33.格式化日期
34.返回每一组需要显示的头部标题
35.Info.plist常见的设置
36.PHC文件
37.UIApplication
38.UIApplication的常用属性
39.iOS7中的状态栏
40.openURL
{
一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,
他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。
}
31.点击了return按钮(键盘最右下角的按钮)就会调用,使用此方法时, 要尊从UITextFieldDelegate协议,
-
(BOOL)textFieldShouldReturn:(UITextField *)textField{
[self
addMessage:textField.text type:MJMessageTypeMe];// 1.自己发一条消息
NSString
*reply = [self replayWithText:textField.text];// 2.自动回复一条消息
[self
addMessage:reply type:MJMessageTypeOther];
self.inputView.text = nil;//
3.清空文字
return YES;// 返回YES即可
}
32.自动滚动表格到最后一行
NSIndexPath *lastPath = [NSIndexPath
indexPathForRow:self.messageFrames.count - 1 inSection:0];
[self.tableView
scrollToRowAtIndexPath:lastPath atScrollPosition:UITableViewScrollPositionBottom
animated:YES];
33.格式化日期
NSDate *now = [NSDate date];
NSDateFormatter *fmt =
[[NSDateFormatter alloc] init];
fmt.dateFormat = @"HH:mm";
//
NSDate ---> NSString
// NSString ---> NSDate
//
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
// 2014-08-09 15:45:56
//
09/08/2014 15:45:56
msg.time = [fmt stringFromDate:now];
34.返回每一组需要显示的头部标题
- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section
{
// 1.创建头部控件
HeaderView
*header = [HeaderView headerViewWithTableView:tableView];
header.delegate =
self;
// 2.给header设置数据(给header传递模型)
header.group =
self.groups[section];
return header;
}
+ (instancetype)headerViewWithTableView:(UITableView
*)tableView
{
static NSString *ID = @"header";
HeaderView *header =
[tableView dequeueReusableHeaderFooterViewWithIdentifier:ID];
if (header ==
nil) {
header = [[HeaderView alloc]
initWithReuseIdentifier:ID];
}
return header;
}
- (id)initWithReuseIdentifier:(NSString
*)reuseIdentifier//在这个初始化方法中,HeaderView的frame\bounds没有值
{
if (self =
[super initWithReuseIdentifier:reuseIdentifier]) {
// 添加子控件
nameView.contentHorizontalAlignment =
UIControlContentHorizontalAlignmentLeft;//设置按钮的内容左对齐
nameView.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);// 设置按钮的内边距
nameView.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0,
0);
[nameView addTarget:self action:@selector(nameViewClick)
forControlEvents:UIControlEventTouchUpInside];
nameView.imageView.contentMode
= UIViewContentModeCenter;// 设置按钮内部的imageView的内容模式为居中
nameView.imageView.clipsToBounds = NO;// 超出边框的内容不需要裁剪
}
return
self;
}
-
(void)layoutSubviews//当一个控件的frame发生改变的时候就会调用,一般在这里布局内部的子控件(设置子控件的frame)
{
[super
layoutSubviews];//一定要调用super的方法
//
1.设置按钮的frame
self.nameView.frame = self.bounds;
//
2.设置好友数的frame
CGFloat countY = 0;
CGFloat countH =
self.frame.size.height;
CGFloat countW = 150;
CGFloat countX =
self.frame.size.width - 10 - countW;
self.countView.frame =
CGRectMake(countX, countY, countW, countH);
}
- (void)didMoveToSuperview//当一个控件被添加到父控件中就会调用
{
if
(self.group.opened) {
self.nameView.imageView.transform =
CGAffineTransformMakeRotation(M_PI_2);
} else
{
self.nameView.imageView.transform =
CGAffineTransformMakeRotation(0);
}
}
- (void)willMoveToSuperview:(UIView *)newSuperview//当一个控件即将被添加到父控件中会调用
{
}
35.Info.plist常见的设置
建立一个工程后,会在Supporting
files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除
在旧版本Xcode创建的工程中,这个配置文件的名字就叫“Info.plist”
项目中其他Plist文件不能带有“Info”这个字眼,不然会被错认为是传说中非常重要的“Info.plist”
项目中还有一个InfoPlist.strings的文件,跟Info.plist文件的本地化相关
常见属性
Localiztion native development
region(CFBundleDevelopmentRegion)-本地化相关
Bundle display
name(CFBundleDisplayName)-程序安装后显示的名称,限制在10-12个字符,如果超出,将被显示缩写名称
Icon
file(CFBundleIconFile)-app图标名称,一般为Icon.png
Bundle
version(CFBundleVersion)-应用程序的版本号,每次往App Store上发布一个新版本时,需要增加这个版本号
Main
storyboard file base name(NSMainStoryboardFile)-主storyboard文件的名称
Bundle
identifier(CFBundleIdentifier)-项目的唯一标识,部署到真机时用到
36.PHC文件
项目的Supporting files文件夹下面有个“工程名-Prefix.pch”文件,也是一个头文件
pch头文件的内容能被项目中的其他所有源文件共享和访问
一般在pch文件中定义一些全局的宏
在pch文件中添加下列预处理指令,然后在项目中使用Log(…)来输出日志信息,就可以在发布应用的时候,一次性将NSLog语句移除(在调试模式下,才有定义DEBUG)
#ifdef DEBUG
#define Log(...) NSLog(__VA_ARGS__)
#else
#define
Log(...) /* */
#endif
37.UIApplication
UIApplication对象是应用程序的象征
每一个应用都有自己的UIApplication对象,而且是单例的
通过[UIApplication
sharedApplication]可以获得这个单例对象
一个iOS程序启动后创建的第一个对象就是UIApplication对象
利用UIApplication对象,能进行一些应用级别的操作
38.UIApplication的常用属性
@property(nonatomic) NSInteger
applicationIconBadgeNumber;//设置应用程序图标右上角的红色提醒数字
@property(nonatomic,getter=isNetworkActivityIndicatorVisible)
BOOL networkActivityIndicatorVisible;//设置联网指示器的可见性
39.iOS7中的状态栏
从iOS7开始,系统提供了2种管理状态栏的方式
1.通过UIViewController管理(每一个UIViewController都可以拥有自己不同的状态栏)
2.通过UIApplication管理(一个应用程序的状态栏都由它统一管理)
在iOS7中,默认情况下,状态栏都是由UIViewController管理的,UIViewController实现下列方法就可以轻松管理状态栏的可见性和样式
-
(UIStatusBarStyle)preferredStatusBarStyle; //状态栏的样式
-
(BOOL)prefersStatusBarHidden; //状态栏的可见性
40.openURL
UIApplication *app = [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString:@"tel://10086"]];//打电话
[app openURL:[NSURL
URLWithString:@"sms://10086"]];//发短信
[app openURL:[NSURL
URLWithString:@"mailto://12345@qq.com"]];//发邮件
[app openURL:[NSURL
URLWithString:@"http://ios.itcast.cn"]];//打开一个网页资源
31-40(PHC文件,UIApplication,Info.plis,监听return按钮,格式化日期,openURL),布布扣,bubuko.com