iOS 学习

1UISearchBar自定义背景、取消按钮中文设置

C代码

  1. UISearchBar *seachBar=[[UISearchBar alloc] init];
  2. //修改搜索框背景
  3. seachBar.backgroundColor=[UIColor clearColor];
  4. //去掉搜索框背景
  5. [[searchbar.subviews objectAtIndex:0]removeFromSuperview];
  6. for (UIView *subview in seachBar.subviews)
  7. {
  8. if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")])
  9. {
  10. [subview removeFromSuperview];
  11. break;
  12. }
  13. }
  14. //自定义背景
  15. UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"40-di.png"]];
  16. [searchBar insertSubview:imageView atIndex:1];
  17. //输入搜索文字时隐藏搜索按钮,清空时显示
  18. - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
  19. searchBar.showsScopeBar = YES;
  20. [searchBar sizeToFit];
  21. [searchBar setShowsCancelButton:YES animated:YES];
  22. return YES;
  23. }
  24. - (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
  25. searchBar.showsScopeBar = NO;
  26. [searchBar sizeToFit];
  27. [searchBar setShowsCancelButton:NO animated:YES];
  28. return YES;
  29. }
  30. //修改UISearchBar取消按钮中文字体
  31. for (id aa in [searchBar subviews]) {
  32. if ([aa isKindOfClass:[UIButton class]]) {
  33. UIButton *btn = (UIButton *)aa;
  34. [btn setTitle:@"取消" forState:UIControlStateNormal];
  35. }
  36. }

2UISearchBar

C代码

  1. #pragma mark 搜索控件
  2. //搜索
  3. - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
  4. UIStoryboard *mainStory = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
  5. FirstViewController *fVC = [mainStory instantiateViewControllerWithIdentifier:@"goFirstView"];
  6. fVC.showStr = self.searchBar.text;
  7. [self presentModalViewController:fVC animated:YES];
  8. }
  9. //搜索输入内容时触发
  10. - (void) searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
  11. }
  12. //焦点进入搜索
  13. - (void) searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
  14. self.soundBtn.hidden = YES;
  15. [self searchBar:searchBar activate:YES];
  16. }
  17. //取消搜索按钮
  18. - (void) searchBarCancelButtonClicked:(UISearchBar *)searchBar {
  19. self.searchBar.text = @"";
  20. self.soundBtn.hidden = NO;
  21. [self searchBar:searchBar activate:NO];
  22. }
  23. - (void)searchBar:(UISearchBar *)searchBar activate:(BOOL) active{
  24. if (!active) {
  25. [self.searchBar resignFirstResponder];
  26. }
  27. [self.searchBar setShowsCancelButton:active animated:YES];
  28. //修改UISearchBar取消按钮字体
  29. for (id aa in [searchBar subviews]) {
  30. if ([aa isKindOfClass:[UIButton class]]) {
  31. UIButton *btn = (UIButton *)aa;
  32. [btn setTitle:@"取消" forState:UIControlStateNormal];
  33. }
  34. }
  35. }

3NSNotificationCenter通告中心

NSNotificationCenter通告与一个按钮中用addTarget绑定方法有些相似,按钮中的绑定触发事件时才调用关联消息。而NSNotificationCenter的范围则大得多,比如说摇动中,当触发摇动事件时,就提交并触发消息。

示例如下:

C代码

  1. //1、需触发的消息方法
  2. - (void) testNotification{
  3. NSLog(@"测试通告中心。。。。。。。");
  4. }
  5. - (void)viewDidLoad
  6. {
  7. [super viewDidLoad];
  8. //2、对象注册,关联消息
  9. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(testNotification) name:@"Dwen_Notification" object:nil];
  10. }
  11. #pragma 通告中心
  12. - (IBAction)notificationTest:(id)sender {
  13. //3、提交消息
  14. [[NSNotificationCenter defaultCenter] postNotificationName:@"Dwen_Notification" object:@"Request Object"];
  15. }

4、视图显示和消失将会调用的方法,可处理一些前一界面的还原初始状态。

- (void) viewWillDisappear:  视图消失时调用

- (void) viewWillAppear:      进入视图时调用

例如:点击搜索后,会的取消按钮,跳到下一界面再返回时,需把取消按钮隐藏掉可通过它们处理。

5、获取程序的AppDelegate

AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];

6ios4跳转界面

C代码

  1. QuotaManageViewController *qmvc = [[QuotaManageViewController alloc] init];
  2. [self.navigationController pushViewController:qmvc animated:YES];
  3. [qmvc release];

7UILable换行

C代码

  1. lab_1.lineBreakMode = UILineBreakModeWordWrap;
  2. lab_1.numberOfLines = 0;

8ipad中设置tableview背景无效,有两种解决方法:

方法一:

C代码

  1. UIView *view = [[UIView alloc] init];
  2. view.backgroundColor = [UIColor clearColor];
  3. tableView2.backgroundView = view;

方法二:

C代码

  1. if ([self.tableView2 respondsToSelector:@selector(backgroundView)]) {
  2. self.tableView2.backgroundView = nil;
  3. }

9、自定义UIView时,会继承它,下面是如何加载UIView对应xib

C代码

  1. UIView *head_View = [[[NSBundle mainBundle] loadNibNamed:@"HeadView" owner:self options:nil] lastObject];
  2. head_View.frame = CGRectMake(0, -120, self.view.frame.size.width, 150);
  3. head_View.backgroundColor = [UIColor brownColor];
  4. [self.view addSubview:head_View];

10、对UIView进行旋转。2012-11-07

今天在做ipad时,弹出的pop视图,总是横屏放着,不能竖屏。纠结了些时间,后来通过修改视图的坐标解决了该问题。

C代码

  1. CGAffineTransform at = CGAffineTransformMakeRotation(M_PI/2);//顺时钟旋转90
  2. at = CGAffineTransformTranslate(at, 200, 0);
  3. [popVC.view setTransform:at];

11、关于在UIView上进行滑动手势和点击事件手势。

C代码

  1. ///////////注flowView为UIView//////////
  2. //添加滑动手势事件
  3. UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:flowView action:@selector(handleGesture:)];
  4. [flowView addGestureRecognizer:gestureRecognizer];
  5. //添加点击手势事件
  6. flowView.userInteractionEnabled = YES;
  7. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:flowView action:@selector(goBigImageView)];
  8. [flowView addGestureRecognizer:tap];

C代码

  1. //滑动手势(里面有手势的不同状态,根据需要进行灵活运用)
  2. - (void)handleGesture:(UIPanGestureRecognizer *)recognizer {
  3. //UITapGestureRecognizer
  4. if (recognizer.state == UIGestureRecognizerStateChanged){
  5. NSLog(@"UIGestureRecognizerStateChanged");
  6. }else if(recognizer.state == UIGestureRecognizerStateEnded){
  7. NSLog(@"UIGestureRecognizerStateEnded");
  8. }else if(recognizer.state == UIGestureRecognizerStateBegan){
  9. NSLog(@"UIGestureRecognizerStateBegan");
  10. }else if(recognizer.state == UIGestureRecognizerStateCancelled){
  11. NSLog(@"UIGestureRecognizerStateCancelled");
  12. }else if(recognizer.state == UIGestureRecognizerStateFailed){
  13. NSLog(@"UIGestureRecognizerStateFailed");
  14. }else if(recognizer.state == UIGestureRecognizerStatePossible){
  15. NSLog(@"UIGestureRecognizerStatePossible");
  16. }else if(recognizer.state == UIGestureRecognizerStateRecognized){
  17. NSLog(@"UIGestureRecognizerStateRecognized");
  18. }
  19. }

12、启动时异常

Couldn‘t register com.yourcompany.ReciteWords with the bootstrap server. Error: unknown error code.
This generally means that another instance of this process was already running or is hung in the debugger

解决方法,重启设备或模拟器

13、读写plist文件

C代码

  1. - (void)readWritePlist{
  2. //获取路径
  3. NSString *homePath = [[NSBundle mainBundle] executablePath];
  4. NSArray *strings = [homePath componentsSeparatedByString: @"/"];
  5. NSString *executableName  = [strings objectAtIndex:[strings count]-1];
  6. NSString *baseDirectory = [homePath substringToIndex:
  7. [homePath length]-[executableName length]-1];
  8. //data.plist文件
  9. NSString *filePath = [NSString stringWithFormat:@"%@/data.plist",baseDirectory];
  10. NSLog(@"filePath: %@",filePath);
  11. NSMutableDictionary *dataDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
  12. NSLog(@"dataDict: %@",dataDict);
  13. //change the value or add the value
  14. [dataDict setObject:@"YES" forKey:@"Trial"];
  15. [dataDict setValue:@"dwen" forKey:@"nickName"];
  16. //write back to data.plist file
  17. [dataDict writeToFile:filePath atomically:NO];
  18. }

14ios生成随机数(三种方式)

int i = rand() % 5;

int i = random() % 5;

int  x = arc4random() % 100;//[0,100] 包括0 ,不包括100

int  y = (arc4random() % 501) + 500;//[500,1000 ],包括500 ,不包括1000

15UIImage图片处理:缩放、设定大小、存储(转载)

C代码

  1. //1.等比率缩放
  2. - (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize{
  3. UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scaleSize, image.size.height * scaleSize);
  4. [image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height * scaleSize)];
  5. UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
  6. UIGraphicsEndImageContext();
  7. return scaledImage;
  8. }
  9. //2.自定长宽
  10. - (UIImage *)reSizeImage:(UIImage *)image toSize:(CGSize)reSize{
  11. UIGraphicsBeginImageContext(CGSizeMake(reSize.width, reSize.height));
  12. [image drawInRect:CGRectMake(0, 0, reSize.width, reSize.height)];
  13. UIImage *reSizeImage = UIGraphicsGetImageFromCurrentImageContext();
  14. UIGraphicsEndImageContext();
  15. return reSizeImage;
  16. }
  17. //3.处理某个特定View
  18. 只要是继承UIView的object 都可以处理
  19. 必须先import QuzrtzCore.framework
  20. -(UIImage*)captureView:(UIView *)theView{
  21. CGRect rect = theView.frame;
  22. UIGraphicsBeginImageContext(rect.size);
  23. CGContextRef context = UIGraphicsGetCurrentContext();
  24. [theView.layer renderInContext:context];
  25. UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
  26. UIGraphicsEndImageContext();
  27. return img;
  28. }
  29. //4.储存图片
  30. 储存图片这里分成储存到app的文件里, 储存到手机的图片库里
  31. // 储存到app的文件里
  32. NSString *path = [[NSHomeDirectory()stringByAppendingPathComponent:@"Documents"]stringByAppendingPathComponent:@"image.png"];
  33. [UIImagePNGRepresentation(image) writeToFile:pathatomically:YES];

16object-c正则验证,方式之一,如下:

    NSPredicate用于指定过滤器的条件。通过该对象准确地描述所需条件,对每个对象通过谓词进行筛选,判断它们是否与条件相匹配。

C代码

  1. NSString *numberRegex = @"[1-4]";
  2. NSPredicate *number = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",numberRegex];
  3. bool result = [number evaluateWithObject:@"1"];

17、定义程序块

C代码

  1. //定义程序块
  2. void(^loggerBlock)(void);
  3. //实现程序块
  4. loggerBlock = ^{NSLog(@"i am test block.");};
  5. //执行程序块
  6. loggerBlock();

18、反射

C代码

  1. //反射(对CodingVo类进行反射)
  2. Class cls = NSClassFromString(@"CodingVo");
  3. id obj = [[cls alloc] init];
  4. SEL selector = NSSelectorFromString(@"test1");
  5. //调用CodingVo类中test1方法
  6. [obj performSelector:selector withObject:nil];

19、调用短信、电话、邮件、Safari浏览器API

C代码

  1. //调用短信
  2. - (IBAction)callMsg:(id)sender {
  3. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://135587"]];
  4. }
  5. //调用电话
  6. - (IBAction)callTel:(id)sender {
  7. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://135587"]];
  8. }
  9. //调用Safari浏览器
  10. - (IBAction)callSafari:(id)sender {
  11. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.baidu.com/"]];
  12. }
  13. // 调用email
  14. - (IBAction)callEmail:(id)sender {
  15. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://[email protected]"]];
  16. }

20、操作声音文件,添加AudioToolbox.framework库。

#import <AudioToolbox/AudioToolbox.h>

@property (assign,nonatomic) SystemSoundID soundID;

//测试播放声音
- (void) testSound{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"caf"];
    NSURL *url = [NSURL fileURLWithPath:path];
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID);
    AudioServicesPlaySystemSound(soundID);
    NSLog(@"testSound...mp3音频文件格式不支持");
}

21ios触摸事件监听和操作(UITouch)

C代码

  1. //手指触摸屏幕时报告
  2. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
  3. NSLog(@"touchesBegan");
  4. }
  5. //手指在屏幕上移动时报告
  6. - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
  7. NSLog(@"touchesMoved");
  8. }
  9. //手指离开屏幕时报告
  10. - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
  11. NSLog(@"touchesEnded");
  12. }
  13. //因接听电话或其他因素导致取消触摸时报告
  14. - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
  15. NSLog(@"touchesCancelled");
  16. }

22\u00B0表示角度符号

NSString *latitudeStr = [NSString stringWithFormat:@"%g\u00B0",newLocation.coordinate.latitude];

 23、实现ios动画效果有两种方式,一种是UIView层面上的,另一种是CATransation更底层次控制

24、设备信息

NSLog(@"系统名称:%@ ,系统版本: %@",[[UIDevice currentDevice] systemName],[[UIDevice currentDevice] systemVersion]);

 25MPMoviePlayerViewController控件中,需把Done改为中文,对工程中plist文件进行设置。对其他英文控件中的英文文本也有同样有效。设置见下图:

 26、文本层CATextLayer

C代码

  1. CATextLayer *txtLayer = [CATextLayer layer];
  2. txtLayer.string = @"地球";
  3. txtLayer.foregroundColor = [[UIColor redColor] CGColor];
  4. txtLayer.bounds = CGRectMake(0, 0, 200, 50);
  5. txtLayer.position = CGPointMake(0, 0);
  6. [imageLayer addSublayer:txtLayer];

 27assignretaincopyreadonly区别

assign:指定setter方法用简单的赋值,这是默认操作。你可以对标量类型(如int)使用这个属性。你可以想象一个float,它不是一个对象,所以它不能retain、copy。

retain:指定retain应该在后面的对象上调用,前一个值发送一条release消息。你可以想象一个NSString实例,它是一个对象,而且你可能想要retain它。

copy:指定应该使用对象的副本(深度复制),前一个值发送一条release消息。基本上像retain,但是没有增加引用计数,是分配一块新的内存来放置它。

readonly:将只生成getter方法而不生成setter方法(getter方法没有get前缀)。

readwrite:默认属性,将生成不带额外参数的getter和setter方法(setter方法只有一个参数)。

atomic:对于对象的默认属性,就是setter/getter生成的方法是一个原子操作。如果有多个线程同时调用setter的话,不会出现某一个线程执行setter全部语句之前,另一个线程开始执行setter的情况,相关于方法头尾加了锁一样。

nonatomic:不保证setter/getter的原子性,多线程情况下数据可能会有问题

28、声明关键字前加extern,为外部变量。外部变量可被其他任何方法或函数访问和更改其值的变量。

iOS 学习

时间: 2024-11-06 10:08:40

iOS 学习的相关文章

iOS学习笔记之UITableViewController&amp;UITableView

iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论文,因此需要继续思考新的算法.这是一件挺痛苦的事情,特别是在很难找到与自己研究方向相关的文献的时候.也许网格序列水印这个课题本身的研究意义就是有待考证的.尽管如此,还是要努力的思考下去.由于实验室的原因,iOS的学习进度明显受到影响,加之整理文档本身是一件耗费时间和精力的事情,因此才这么久没有写笔记了. M

iOS 学习资料整理

视频教程(英文) 视频 简介 Developing iOS 7 Apps for iPhone and iPad 斯坦福开放教程之一, 课程主要讲解了一些 iOS 开发工具和 API 以及 iOS SDK 的使用, 属于 iOS 基础视频 iPad and iPhone Application Development 该课程的讲师 Paul Hegarty 是斯坦福大学软件工程学教授, 视频内容讲解得深入, 权威, 深受好评 Advanced iPhone Development - Fall

【资源】IOS学习资料 - 逆天整理 - 精华无密版【最新】【精华】

 入门看视频,提高看书籍,飘升做项目.老练研开源,高手读外文,大牛讲低调~  01.IOS基础 01.iOS开发快速入门教程 http://pan.baidu.com/s/1kT3ScOf 链接: http://pan.baidu.com/s/1kTKheAF 密码: yycm 02.苹果开发零基础入门教程 http://pan.baidu.com/s/1dDfHL77 链接: http://pan.baidu.com/s/1o6iNkIu 密码: nn3a 03.黑马IOS2期基础 http:

iOS: 学习笔记, Swift操作符定义

Swift操作符可以自行定义, 只需要加上简单的标志符即可. @infix 中置运算. 如+,-,*,/运算 @prefix 前置运算. 如- @postfix 后置运算. a++, a-- @assignment 赋值运算. +=, -=, --a, ++a // // main.swift // SwiftBasic // // Created by yao_yu on 14-7-27. // Copyright (c) 2014年 yao_yu. All rights reserved.

iOS学习之Map,定位,标记位置的使用

iOS上使用地图比Android要方便,只需要新建一个MKMapView,addSubView即可.这次要实现的效果如下: 有标注(大头针),定位,地图. 1.添加地图 1.1 新一个Single View app ,选择默认项,创建后,在ViewController.h [cpp] view plaincopy #import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #import <CoreLocation/CoreLocati

IOS学习之路- 运行过程

1. 执行Main函数(在main.m文件中) 2. 加载MainStoryborad.storyboard文件 * 创建ViewController文件 * 根据storyboard文件中描述创建ViewController中的UIView(父层) * 创建UIView内部的所有子控件 * 将创建好的所有UIView对象跟ViewController做相应的关联(IBAction,IBoutlet  ) 3. 将程序的第一个控制器内部的UIview显示到手机屏幕上. IOS学习之路- 运行过程

IOS学习笔记 -- Modal和Quartz2D

一. Modal1.Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止;Modal只是改变了View的现实,没有改变rootViewController 2.常用方法1>.以Modal的形式展示控制器- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion2>.关

iOS: 学习笔记, 添加一个带界面约束的控制器

1. 创建一个空iOS应用程序(Empty Application). 2. 添加加控制器类. 修改控制器类的viewDidLoad 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 //创建标题 5 UILabel *header = [[UILabel alloc] init]; 6 header.text = @"欢迎来到我的世界!"; 7 header.textAlignment = NSTextAlignmentCenter

2015最新iOS学习线路图

iOS是由苹果公司开发的移动操作系统,以xcode为主要开发工具,具有简单易用的界面.令人惊叹的功能,以及超强的稳定性,已经成为iPhone.iPad 和iPod touch 的强大基础:iOS 内置的众多技术和功能让 Apple设备始终保持着遥遥领先的地位. iOS学习路线:http://www.mobiletrain.org/page/ios.html 课程分  类 课程模块 模块介绍 课程内容 Part1C语言 C语言和Objective-C语言 C语言 Mac系统及常用工具.进制:C数据

ios学习记录 day41 UI17 多线程

CPU(工厂) 进程(车间) 线程(工人) 一个进程代表一个应用程序 CPU总是运行一个进程,其它进程处于非运行状态.一个进程可以包含多个线程.线程与线程之间可以共享进程的内存区域. 打开一个应用程序,系统会给我们创建一个线程,称为主线程 管理主界面的UI与内部循环机制(与界面相关的东西必须放在主线程中!!!) 压力比较大且会造成线程阻塞(界面卡),因此我们通过创建子线程来对主线程进行分压. 什么时候用多线程 1.网络请求(同步的) 2.文件读写(少) 3.大数据计算(冒泡) 4.数据库sele