iOS_开发中遇到的那些问题_1
【自编号:60】【AutoLayout中,怎样让ImageView保持固定的宽高比?比如1:1】
先将imageViewframe手动写成:宽20,高20,再勾选Aspect Ratio加入宽高比约束
【查看原文】 【2015-03-23 11:29:04 by beyond】
【自编号:61】【Cell中,先运行这个- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier,再运行这个-(void)awakeFromNib;】【2015-03-23 11:40:01 by beyond】
【自编号:71】【推断tableView滚动到了最后一行】
self.tableView.contentSize.height =contentOffset+bounds.size.height
【2015-03-23 15:27:43 by beyond】
【自编号:78】【错误installAppearanceSwizzlesForSetter】
原因是:[[UINavigationBar appearance] setTranslucent:NO]在iOS8中才有, 解决的方法:#define IOS8 [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 if(IOS8 && [UINavigationBar conformsToProtocol:@protocol(UIAppearanceContainer)]) { [[UINavigationBar appearance] setTranslucent:NO]; }
【2015-03-23 17:14:57 by beyond】
【自编号:79】【Unable to determine simulator device to boot】
原因:XCode不知道选择哪一个模拟器去执行app. 解决方法:退出全部XCode和模拟器,若还不行,就重新启动mac
【2015-03-23 17:24:04 by beyond】
【自编号:80】【打开模拟器】
XCode-->Open Developer Tool-->Simulator
【2015-03-23 17:24:48 by beyond】
【自编号:160】【自己主动定位:No. 3-1 Xianing Alley, No. 3-1 Xianing Alley, Wen'er Road Xixi Residential District, Xihu Hangzhou, Zhejiang China @ <+30.28138170,+120.14211600> +/- 100.00m, region (identifier <+30.28138150,+120.14211600> radius 49.29) <+30.28138150,+120.14211600>
radius 49.29m】【2015-03-24 09:46:15 by beyond】
【自编号:161】【自己主动定位:中国浙江省杭州市西湖区西溪街道文二路下宁巷3-1号, 中国浙江省杭州市西湖区西溪街道文二路下宁巷3-1号 @ <+30.28138170,+120.14211600> +/- 100.00m, region (identifier <+30.28138150,+120.14211600> radius 49.29) <+30.28138150,+120.14211600> radius 49.29m】【2015-03-24 09:49:49 by beyond】
【自编号:162】【UserDefault写入的文件夹是:/var/mobile/Applications/Library/Preferences/com.beyond.testUserD.plist】【2015-03-24 10:15:15 by beyond】
【自编号:165】【UILabel显示:标题。
。。
张数,设置NSLineBreakByTruncatingMiddle就可以】【2015-03-24 15:43:37 by beyond】
【自编号:179】【URL Schemes打开app】【进入网址】 【2015-03-25 11:59:52 by beyond】
【自编号:180】【URL Schemes打开app】【进入网址】 【2015-03-25 12:02:43 by beyond】
【自编号:184】【SDWebImage默认会永久缓存一张图片】
但假设同一个url下的图片是变化的。那临时想到的是用内存缓存,[imgView sd_setImageWithURL:url placeholderImage:imgPlace options:SDWebImageCacheMemoryOnly];
【2015-03-25 15:14:35 by beyond】
【自编号:186】【推断包括字符串NSRange】
NSRange range = [requestURLStr rangeOfString:@"sg31.com"];
if (range.length > 0) {
}
或者
if(range.location !=NSNotFound){
}
【2015-03-25 16:41:50 by beyond】
【自编号:195】【正则NSPredicate检查中文】
// 检查汉字,YES代表全是汉字
- (BOOL)isHanziCheck:(NSString *)str
{
// NSString *regex = @"[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9\u4e00-\u9fa5]+";
NSString *regex = @"[\u4e00-\u9fa5]{2,8}";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if(![pred evaluateWithObject: str]){
/*
//此动画为在顶上显示文字
[MPNotificationView notifyWithText:@"昵称仅仅能由中文、字母或数字组成"
andDuration:0.5];
*/
return NO;
}
return YES;
}
【2015-03-27 10:14:24 by beyond】
【自编号:196】【无法在真机执行,XCode提示ineligible device】
解决的方法:在targets---->build settings---->iOS Deployment Target选择iOS6.1或者更低的版本号
【2015-03-30 09:36:17 by beyond】
【自编号:197】【CardI扫描卡没有反应】
card.io only scans 5 card types (MasterCard, Visa, Discover, American Express, JCB),后面是stackoverflow的解答
【进入网址】
【查看原文】 【2015-03-30 11:34:15 by beyond】
【自编号:198】【pod install报错 版本号不兼容】
VKVideoPlayerTests` (iOS 5.0) is not compatible with `Expecta (0.3.2)` which,解决方法:将项目deployment改高一点如:6.1就可以
【2015-03-30 11:35:52 by beyond】
【自编号:199】【第3方_VKPlayer播放器】【进入网址】 【2015-03-30 11:42:41 by beyond】
【自编号:201】【Not a git repository】
fatal: Not a git repository (or any of the parent directories): .git
解决的方法:git init 就可以
【2015-03-30 11:58:48 by beyond】
【自编号:202】【OCR图像识别】
能够实现相似taobaoclient扫描银行卡号的功能
tid=123463" target="_blank">【查看原文】
【自编号:208】【往模拟器里加入照片的最简单的方法:直接把照片拖到模拟器上就能够了】【2015-03-31 13:44:57 by beyond】
【自编号:209】【特效滤镜】
archive_path=%2F%5Bappcodes.org%5D-InstaFilters-120927%2Fdiwu-InstaFilters-d841f80&category_id=4&rName=[appcodes.org]-InstaFilters-120927.zip" target="_blank">【点击下载】
【2015-03-3113:46:07 by beyond】
【自编号:210】【DLog】
#ifdef DEBUG
#define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#define DLog(...)
#endif
【2015-03-31 18:55:00 by beyond】
【自编号:211】【怎样设置appIcon】
点击targets--->general--->use asset catalog
【查看原文】 【2015-04-01 14:53:43 by beyond】
【自编号:214】【MJRefresh的github】【点击下载】 【2015-04-01 17:31:26 by beyond】
【自编号:216】【scrollView滚动方向】
向上拉时,contentOffset.y为正
向下拉时。contentOffset.y为负
滚动推断用到的变量:
typedef void (^ScrollBlock)(void);
// 向上滚动时的block
@property (nonatomic,strong) ScrollBlock scrollUpBlock;
// 向下滚动时的block
@property (nonatomic,strong) ScrollBlock scrollDownBlock;
// 滚动推断
CGFloat startY;
BOOL isNowUp;
BOOL isDown;
BOOL isUserDrag;
#pragma mark - 滚动,新增,显示,隐藏
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
// 開始时,标记置真
isUserDrag = YES;
// 记录一下開始滚动的offsetY
startY = scrollView.contentOffset.y;
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
// 结束时,置flag还原
isUserDrag = NO;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// 仅仅实用户drag时,才进行响应
if(isUserDrag){
// 实时
// 推断一下,并发出通知
CGFloat newY = scrollView.contentOffset.y;
if(startY - newY >0){
// 说明向上滚动
if(!isNowUp){
//通过block告诉外部控制器
if(_scrollUpBlock){
_scrollUpBlock();
}
isNowUp = YES;
isDown = NO;
}
}else if(startY - newY<0){
// 说明向下滚动
if(!isDown){
//通过block告诉外部控制器
if(_scrollDownBlock){
_scrollDownBlock();
}
isDown = YES;
isNowUp = NO;
}
}
startY = scrollView.contentOffset.y;
} }
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ if (_scrollDownBlock && self.tableView.contentSize.height - (self.tableView.contentOffset.y+self.tableView.bounds.size.height) < 1) {
_scrollDownBlock();
return;
}
if(_scrollUpBlock){
_scrollUpBlock();
isNowUp = YES;
isDown = NO;
return;
} }
【2015-04-02 11:41:05 by beyond】
【自编号:217】【定义枚举】
// 定义一个枚举
typedef enum {
// 返回button
FootViewBtnTypeBack,
// 我的
FootViewBtnTypeMine,
// 写评论
FootViewBtnTypeWriteComment,
// 查看评论
FootViewBtnTypeReadComment,
// 关注、取消关注
FootViewBtnTypeAttention,
// 很多其它button
FootViewBtnTypeMore } FootViewBtnType;
【2015-04-02 14:57:34 by beyond】
【自编号:218】【变量名和类型同样时的异常错误】
FilterCtrl *FilterCtrl = [[FilterCtrl alloc]init];
这样命名变量,会报错,提示:没有声明alloc方法。 。 。 。
【2015-04-02 15:04:13 by beyond】
【自编号:222】【IOS7新特性之XCODE】【进入网址】 【2015-04-03 10:55:31 by beyond】
【自编号:223】【第3方集成支付】【进入网址】 【2015-04-03 10:56:07 by beyond】
【自编号:224】【popping动画演示】【进入网址】 【2015-04-03 10:56:28 by beyond】
【自编号:226】【实时获得webView的contentSize】
iOS 怎样计算UIWebView的ContentSize
分类: iPhone常见问题 2014-02-27 17:33 1754人阅读 评论(0) 收藏 举报
首选要等UIWebView载入内容后,然后在它的回调方法里将webview的高度Height设置足够小,就设置为1吧。由于这样才干用
sizeThatFits才干计算出webview得内容大小
- (void)webViewDidFinishLoad:(UIWebView *)aWebView {
CGRect frame = aWebView.frame;
frame.size.height = 1;
aWebView.frame = frame;
CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
aWebView.frame = frame; NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);
} UIWebView计算高度 (2013-10-09 14:48:39)转载▼
标签: uiwebview 高度 计算 sizethatfits 分类: ios
第一种:
- (void)webViewDidFinishLoad:(UIWebView *)webView{
float height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] floatValue];
//document.body.scrollHeight
} 第二种: - (void) webViewDidFinishLoad:(UIWebView *)webView
{
CGRect frame = webView.frame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
webView.frame = frame;
} 第二种
- (void)viewDidLoad {
[super viewDidLoad];
webview.delegate = self;
[webview loadHTMLString:@"
fdasfda
" baseURL:nil];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *output = [webview stringByEvaluatingJavaScriptFromString:@"document.getElementByIdx_x_x_x("foo").offsetHeight;"];
NSLog(@"height: %@", output);
}
【2015-04-03 15:46:30 by beyond】
【自编号:227】【ios_数组中放枚举】
NSInteger _btnTagArr[4] = {ContactSelectBtnChatting,ContactSelectBtnTel,isTeacher? ContactSelectBtnLeave:ContactSelectBtnDetail};
【2015-04-03 17:01:13 by beyond】
【自编号:246】【this class is not key value coding-compliant for the key HeightConstraint】
问题:
this class is not key value coding-compliant for the key HeightConstraint
原因:
在IB上拖线时的时候。有多的 ,删除掉就可以
解答:
【2015-04-07 11:14:44 by beyond】
【自编号:247】【dispatch_after延时改变约束】
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 当事件触发时,改变其constant值,然后调用约束所在的对象的 layoutIfNeeded方法,固定的~ 比如:
_topView.collectionViewHeightConstraint.constant = 50;
// self.leftMarginConstraint.constant = 100;
// self.widthConstraint.constant = 200;
[UIView animateWithDuration:2.0 animations:^{
[self.view layoutIfNeeded];
[_topView layoutIfNeeded];
}];
});
【2015-04-07 11:23:03 by beyond】
【自编号:253】【ios_VLC】【查看原文】 【2015-04-08 17:04:16 by beyond】
【自编号:254】【ios_VLC】
VLC for iOS 2.3.0 关于VLC配置问题,依据个人经验整理了一下,希望能帮到须要的朋友。 官网链接:https://wiki.videolan.org/IOSCompile/ 百度云盘链接:http://pan.baidu.com/s/1bnEOXPH password:ur4l 配置说明(百度云盘) 官网依照说明操作就能够了仅仅是下载的地址是个谷歌的什么站点,所以你懂得。 百度云盘下载下来后须要配置下文件VLC/ios/External 这个目录以下有六个文件(快捷方式):MediaLibraryKit,MobileVLCKit,PLCrashReporter,QuincyKit,gtl,upnpx
又一次配置下这六个文件路径就能够用了,vlc源代码是区分真机和模拟器的 终端配置路径
1、在终端进入External目录
2、ln -s -f是终端改动文件路径的,关于终端命令不懂的朋友请百度,在此就不班门弄斧了。
真机就用Release-iphoneos,模拟器就用Release-iphonesimulator ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/MediaLibraryKit/build/Release-iphoneos MediaLibraryKit ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/VLCKit/build/Release-iphoneos MobileVLCKit ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/PLCrashReporter/build/Release-iphoneos PLCrashReporter ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/QuincyKit/client/iOS/QuincyLib/build/Release-iphoneos QuincyKit ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/GDrive/build/Release-iphoneos gtl ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/upnpx/projects/xcode4/upnpx/build/Release-iphoneos upnpx 3、路径正确的话就没问题了,ls -l 查看文件路径 改动完毕后就能够启动了VLC/iOS/VLC for iOS.xcodeproj 注意:我有时候配置正确路径可是文件还是报错,这样的情况的话解压又一次搞吧,临时不知道怎么处理。 SimplePlayback
这个是VLC在线播放的一个demo,路径:VLC/ios/ImportedSources/VLCKit/Examples_iOS/SimplePlayback 项目直接拷贝出来不能用的,要配置下。
libMobileVLCKit.a 这个demo用到这个静态库。 静态库区分真机和模拟器的。 静态库我不太懂怎么配置,搞了几次没搞定 只是有另外的办法MobileVLCKit.framework这个不区分真机和模拟器的。
路径:VLC/ios/ImportedSources/VLCKit/build 注意:Deployment target 要低于7.0 END 最后希望能帮到须要的朋友,不懂得能够联系我,qq:527993842,加好友请说明谢谢,因为工作原因可能无法及时回复请见谅,并且我也是刚接触vlc。 关键词:iOS VLC MediaLibraryKit项目中的Search paths使用相对路径就能够了。 Header Search Paths --> ../../External/MobileVLCKit/include
Library Search Paths --> ../../External/MobileVLCKit MediaLibraryKit项目中相对路径$(SRCROOT)得到的值是/XXX/XXX/VLC/ios/ImportedSources/MediaLibraryKit,而不是想象中的/XXX/XXX/VLC/ios/ 多谢LZ的奉献~~~
【查看原文】 【2015-04-08 17:05:30 by beyond】
【自编号:255】【导航返回button】
UIButton* btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, image.size.width+10, 40)];
btn.showsTouchWhenHighlighted = YES;
[btn setImage:image forState:UIControlStateNormal];
[btn addTarget:theTarget action:sel forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithCustomView:btn];
backBtn.tag = 9528; vc.navigationItem.leftBarButtonItem = backBtn;
【2015-04-08 17:29:42 by beyond】
【自编号:256】【iphone真机死活不旋转】
死活不走代理方法:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait
|| interfaceOrientation == UIInterfaceOrientationLandscapeLeft
|| interfaceOrientation == UIInterfaceOrientationLandscapeRight);
} 原因可能是:手机上拉高速设置栏中:竖排方向锁定 :打开了
【2015-04-09 11:13:39 by beyond】
【自编号:257】【模拟器上面 播放视频崩溃】
iphone 4s 8.0系统的模拟器上面 播放视频:
崩溃:
Apr 9 11:44:39 [jun] rtcreporting[57158] : logging starts...
Apr 9 11:44:39 [jun] rtcreporting[57158] : setMessageLoggingBlock: called
原因:
在模拟器上面播放视频
解决的方法:
去掉全局断点,这是一个bug
【2015-04-09 11:52:57 by beyond】
【自编号:258】【应该竖屏,仅在视频播放页面横屏】
在app delegate中。启动时,
[userDefault setBool:NO forKey:@"userDefault_isAllowLandscape"];
[userDefault synchronize];
在app delegate中,通过一个本地保存的key进行推断。是否进行横屏
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
// 全局的设置:同意竖屏+横屏
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
BOOL isAllowLandscape = [userDefault boolForKey:@"userDefault_isAllowLandscape"];
if (isAllowLandscape) {
return UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskLandscape;
} else {
return UIInterfaceOrientationMaskPortrait;
} }
在视频播放控制器中。更改本地保存的key就可以
【2015-04-09 14:40:52 by beyond】
【自编号:261】【ios_xib_preview预览】
右上方----show the assistant edit ---- 选择新窗体中manual最下方的Preview
【2015-04-10 09:51:28 by beyond】
【自编号:267】【inDatabase: was called reentrantly on the same queue, which would lead to a deadlock】
在使用时,假设在queue里面的block运行过程中,又调用了 indatabase方法,则会检查 是不是同一个queue,假设是同一个queue会死锁;原因非常easy:
队列里面 放了一个block,该block又在 本队列 后面放了一个 block;
从而:前一个block 里面 调用了 后一个block,必须等后一个block运行完毕了。
前一个block才会 出队列;
而后一个block想要运行,则又必须先等 前一个block出队列。
因此 死锁。! 。! 解决方法:在indatabase的block中,不要再调用indatabase方法
[[[DBHelper shareInstance] dbQueue]inDatabase:^(FMDatabase *db){ isSuccess = [self.helper update4Table:TB_User_Friend withArgs:args where:where]; }];
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- (void)inDatabase:(void (^)(FMDatabase *db))block {
/* Get the currently executing queue (which should probably be nil, but in theory could be another DB queue
* and then check it against self to make sure we're not about to deadlock. */
FMDatabaseQueue *currentSyncQueue = (__bridge id)dispatch_get_specific(kDispatchQueueSpecificKey);
assert(currentSyncQueue != self && "inDatabase: was called reentrantly on the same queue, which would lead to a deadlock");
}
【2015-04-16 10:49:41 by beyond】
【自编号:270】【自己主动布局scrollView】
contentSize 必须明白指定。如label距离下方多少。距离右边多少,这样才干够 让scrollView计算出contentSize
【查看原文】 【2015-04-16 15:50:52 by beyond】
【自编号:271】【先对数组统一排序,再进行分组,再组内排序】
// 其它情况,返回是数组
NSMutableArray *contentDictArr = (NSMutableArray *)content;
DLog(@"返回是数组,长度是 %d",contentDictArr.count);
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// NSArray 转成 NSMutableArray
// 0、对于不启用的,即enabled为0的字典模型,删除掉
NSMutableArray *dictArr = [NSMutableArray array];
for (NSInteger i = 0; i < contentDictArr.count; i++) {
NSDictionary *dict = contentDictArr[i];
if ([[dict objectForKey:@"FEnabled"]intValue] == 1) {
[dictArr addObject:dict];
}
}
// DLog(@"清除未启用的字典后的数组:%@",dictArr);
// 0.1、对于被包括的模块。临时剔除
NSMutableArray *tempdictArr = [NSMutableArray array];
for (NSInteger i = 0; i < dictArr.count; i++) {
NSDictionary *dict = dictArr[i];
// 假设有值,则说明是某个模块的子模块@"26e86235-e04c-46e1-a7d5-6d513c02de39"
// 假设没有值,即NSNull,表示是根文件夹模块,直接展示
if ([[dict objectForKey:@"FUpCMID"] class] == [NSNull class]) {
[tempdictArr addObject:dict];
}
} // 1、对数组按GroupTag排序
NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"FGroupTag" ascending:YES]];
NSArray *sortedArr = [tempdictArr sortedArrayUsingDescriptors:sortDesc];
// DLog(@"排序后的数组:%@",sortedArr); // 2、对数组进行分组,按GroupTag
// 遍历,创建组数组,组数组中的每个元素是一个模型数组
NSMutableArray *testGroupArr = [NSMutableArray array];
NSMutableArray *currentArr = [NSMutableArray array];
// 由于肯定有一个字典返回,先加入一个
[currentArr addObject:sortedArr[0]];
[testGroupArr addObject:currentArr];
// 假设不止一个,才要动画加入
if(sortedArr.count > 1){
for (NSInteger i = 1; i < sortedArr.count; i++) {
// 先取出组数组中 上一个模型数组的第一个字典模型的groupID
NSMutableArray *preModelArr = [testGroupArr objectAtIndex:testGroupArr.count-1];
NSInteger preGroupID = [[[preModelArr objectAtIndex:0] objectForKey:@"FGroupTag"] intValue];
// 取出当前字典,依据groupID比較,假设同样则加入到同一个模型数组;假设不同样,说明不是同一个组的
NSDictionary *currentDict = sortedArr[i];
NSInteger groupID = [[currentDict objectForKey:@"FGroupTag"] intValue];
if (groupID == preGroupID) {
[currentArr addObject:currentDict];
}else{
// 假设不同样,说明 有新的一组,那么创建一个模型数组,并加入到组数组testGroupArr
currentArr = [NSMutableArray array];
[currentArr addObject:currentDict];
[testGroupArr addObject:currentArr];
}
}
}
// 3、遍历 对每一组 进行排序
NSMutableArray *tempGroupArr = [NSMutableArray array];
for (NSArray *arr in testGroupArr) {
// NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"FOrder" ascending:YES]];
NSArray *tempArr = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
if([[obj1 objectForKey:@"FOrder"]intValue] < [[obj2 objectForKey:@"FOrder"]intValue]){
return NSOrderedAscending;
}
if([[obj1 objectForKey:@"FOrder"]intValue] > [[obj2 objectForKey:@"FOrder"]intValue]){
return NSOrderedDescending;
}
return NSOrderedSame;
}];
[tempGroupArr addObject:tempArr];
}
testGroupArr = tempGroupArr;
DLog(@"封装好的group数组:%@",testGroupArr);
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// testGroupArr 将封装好的字典数组缓存起来,以便下次调用 userDefault_localGroupArr
// 依据用户上次选择的,展示
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setBool:YES forKey:@"userDefault_hasCached_moduleDictArr"];
NSString *jsonStr = testGroupArr.JSONString;
DLog(@"没有网络的时候用:jsonStr:%@",jsonStr);
[userDefault setObject:jsonStr forKey:@"testGroupArr_jsonStr"];
[userDefault sync
【2015-04-17 11:39:14 by beyond】
【自编号:272】【awakeFromNib】
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
} - (void)awakeFromNib{
[super awakeFromNib];
NSLog(@"call %s", __FUNCTION__);
self.backgroundColor = [UIColor redColor];
// 其它初始化方法
}
【2015-04-17 13:44:36 by beyond】
【自编号:273】【iOS开发的一些奇巧淫技】【查看原文】 【2015-04-17 13:45:06 by beyond】
【自编号:274】【nsrange,是 一个结构体,方法: NSMakeRange(<#NSUInteger loc#>, <#NSUInteger len#>)】【2015-04-17 15:36:04 by beyond】
【自编号:279】【textView占位】
Easy way, just create placeholder text in UITextView by using the following UITextViewDelegate methods: - (void)textViewDidBeginEditing:(UITextView *)textView
{
if ([textView.text isEqualToString:@"placeholder text here..."]) {
textView.text = @"";
textView.textColor = [UIColor blackColor]; //optional
}
[textView becomeFirstResponder];
} - (void)textViewDidEndEditing:(UITextView *)textView
{
if ([textView.text isEqualToString:@""]) {
textView.text = @"placeholder text here...";
textView.textColor = [UIColor lightGrayColor]; //optional
}
[textView resignFirstResponder];
}
just remember to set myUITextView with the exact text on creation e.g. UITextView *myUITextView = [[UITextView alloc] init];
myUITextView.delegate = self;
myUITextView.text = @"placeholder text here...";
myUITextView.textColor = [UIColor lightGrayColor]; //optional
and make the parent class a UITextViewDelegate before including these methods e.g. @interface MyClass ()
@end
【进入网址】 【2015-04-20 10:30:15 by beyond】
【自编号:281】【btn得到cell得到table得到row】
while (![btn isMemberOfClass:[self class]]){
btn = (UIButton *)[btn superview];
}
MyProjectCell *cell = (MyProjectCell *)btn;
UITableView *tableView = (UITableView *)cell;
while (![tableView isMemberOfClass:[UITableView class]]){
tableView = (UITableView *)[tableView superview];
}
NSIndexPath *path = [tableView indexPathForCell:cell];
row = path.row;
// 已经弃用,调用外界的控制器的block,并将cell的行号传递过去
// _wannaChangeStatusBlock(row); // 调用外界的控制器的block,并将cell的行号传递过去
_wannaChangeStatusBlockExt(row,cell);
【2015-04-21 15:31:01 by beyond】
【自编号:282】【auto adjust cell】
viewdidload
tableView.rowHeight = UITableViewAutomaticDimension;
tableView.estimatedRowHeight = 10;
cellForRow
[cell layoutIfNeeded];
【2015-04-21 15:37:29 by beyond】
【自编号:283】【iOS开发的一些奇巧淫技】【进入网址】 【2015-04-22 16:46:25 by beyond】
【自编号:284】【url schemes】
project--->targets--->info--->urlTypes
identifier: com.sg31.www
url schemes: beyond
以下的为接收到外部调用的时候程序启动,响应方法,在safari输入:beyond://com.sg31.www
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { if ([[url scheme] isEqualToString:@"beyond"]) {
NSLog(@"外部调用成功");
}
return YES;
}
【2015-04-23 09:58:25 by beyond】
【自编号:285】【动画特效1】
CAKeyframeAnimation * animation;
animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
animation.duration = 0.5;
animation.delegate = self;
animation.removedOnCompletion = YES;
animation.fillMode = kCAFillModeForwards; NSMutableArray *values = [NSMutableArray array];
[values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)]];
[values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.2, 1.2, 1.0)]];
[values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9, 0.9, 0.9)]];
[values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]]; animation.values = values;
[_contentView.layer addAnimation:animation forKey:nil];
【2015-04-23 17:22:19 by beyond】
iOS_开发中遇到的那些问题_1的更多相关文章
- iOS_开发中引导页的设置及代码
在iOS 手机App 软件的开发中, 基本上每一个完整的App 都有与之相对应的引导页的设置,引导页也会有很多种设置的方式,根据不同的情况,选择不同的编码,在这里,我分享一下自己关于引导页的一些看法和 ...
- 【Cocos2d-x游戏开发】细数Cocos2d-x开发中那些常用的C++11知识
自从Cocos2d-x3.0开始,Cocos2dx就正式的使用了C++11标准.C++11简洁方便的特性使程序的可拓展性和可维护性大大提高,也提高了代码的书写速度. 下面我们就来一起学习一下Cocos ...
- iOS开发中遇到的一些问题及解决方案【转载】
iOS开发中遇到的一些问题及解决方案[转载] 2015-12-29 [385][scrollView不接受点击事件,是因为事件传递失败] // // MyScrollView.m // Creat ...
- TDD在Unity3D游戏项目开发中的实践
0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...
- React在开发中的常用结构以及功能详解
一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...
- Android学习探索之Java 8 在Android 开发中的应用
前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- 总结iOS开发中的断点续传那些事儿
前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...
- 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践
提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...
随机推荐
- swift 即使不使用oc的动态派发机制也应该借鉴isa类型识别机制
目前的消息派发机制真的很鸡肋. 简直是一堆狗屎. 类型信息中包含所有需要动态派发的函数:这个包含两类:类和protocol: 在编译时,首先搜索动态派发列表: 动态派发列表没有,在搜索静态派发列表: ...
- laravel如何自定义控制器目录
默认控制器在App\Http\Controllers目录下,如何自定义目录呢? 首先我们看一下laravel的请求周期 我们看一下服务提供者RouteServicePrivder文件中的一个函数 /* ...
- Python框架Django的入门
本篇文章主要给大家介绍Django的入门知识:
- B1. Concurrent 多线程的创建
[概述] 多线程的创建常用的有两种方法:1). 继承 Thread 类: 2). 实现 Runnable 接口: 3). 实现 Callable 接口. [继承 Thread 类] /** * 1. ...
- linux内核中GNU C和标准C的区别
linux内核中GNU C和标准C的区别 今天看了一下午的linux内核编程方面的内容,发现linux 内核中GNU C与标准C有一些差别,特记录如下: linux 系统上可用的C编译器是GNU C编 ...
- [css或js控制图片自适应]
[css或js控制图片自适应]图片自动适应大小是一个非常常用的功能,在进行制作的时候为了防止图片撑开容器而对图片的尺寸进行必要的控制,我们可不可以用CSS控制图片使它自适应大小呢?此个人博客想到了一个 ...
- urlEncoder
拷贝自php的源码,url编码 //url decode //str:输入,输出 //len:str输入字符串大小 //返回值:str解码后字符串大小 int php_url_decode(char ...
- 转载:Django之Form组件
Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建Form类 +? 1 2 3 ...
- table中JS选取行列
<table border="1" align="center" style="width: 500px" id="doct ...
- sort 结构体 正数负数分开排序
对于结构体排序的一点点记录,之前遇到过结构体排序,个人比较喜欢使用在结构体当中直接重载小于号的方法, 例如说: struct Node{ int index; int del; bool operat ...