首页 > 代码库 > 31-40(PHC文件,UIApplication,Info.plis,监听return按钮,格式化日期,openURL)

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"]];//打开一个网页资源