IOS开发基础知识--碎片8
1:用UIImageView作为背景,但直接把按钮或者UITextField放在上面无法相应事件。
解决办法:UIImageView默认的UserInteractionEnabled是NO,把它修改成YES,或者可以直接在XCODE上面的view有个属性勾选User Interaction Enabled
遇到的场景(在滚动视图里面放一个图片视图,在图片视图上又放置一个按键,发现一直没有响应效果);
2:AFnetWorking报"Request failed: unacceptable content-type: text/html"
对应到自己的项目里面,我用的是AFNetworking这套网络请求包,需要改的是: AFURLResponseSerialization.m文件 223行: self.acceptableContentTypes = [NSSetsetWithObjects:@"application/json", @"text/html",@"text/json",@"text/javascript", nil]; 加上@"text/html",部分,其实就是添加一种服务器返回的数据格式。
3:NSMutableArray和NSArray的相互转换
// NSArray --> NSMutableArray NSMutableArray *myMutableArray = [myArray mutableCopy]; // NSMutableArray --> NSArray NSArray *myArray = [myMutableArray copy];
4:自定义系统导航条上面的返回按钮,以及文字,右侧收藏按钮
//中间标题 UILabel *navLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; navLabel.text = @"团购详情"; navLabel.textColor = [UIColor whiteColor]; navLabel.font = [UIFont systemFontOfSize:18]; navLabel.textAlignment = NSTextAlignmentCenter; self.navigationItem.titleView = navLabel; //右边收藏按钮 UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeCustom]; rightButton.frame = CGRectMake(0, 0, 20, 20); [rightButton setBackgroundImage:LOAD_IMAGE(@"meishoucang") forState:UIControlStateNormal]; [rightButton addTarget:self action:@selector(doShouCang) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithCustomView:rightButton]; self.navigationItem.rightBarButtonItem = rightItem; //左边返回按钮 UIButton *fanHuiButton = [UIButton buttonWithType:UIButtonTypeCustom]; fanHuiButton.frame = CGRectMake(0, 0, 30, 40); [fanHuiButton setBackgroundImage:LOAD_IMAGE(@"fanhuijiantou") forState:UIControlStateNormal]; [fanHuiButton addTarget:self action:@selector(doFanHui) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:fanHuiButton]; self.navigationItem.leftBarButtonItem = leftItem; 导航条上的title字体, 字号 可以这么定义,完全使用系统的 [self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor colorWithRed:1.0/255 green:1.0/255 blue:1.0/255 alpha:1], UITextAttributeTextColor,[UIColor clearColor],UITextAttributeTextShadowColor,[UIFont systemFontOfSize:20],UITextAttributeFont,nil]];
5:清理UITableView底部空的列
self.tableView.tableFooterView = [[UIView alloc] init];
6:如何隐藏navigation跳转后的头部右键
//隐藏头部左边的返回 self.navigationItem.hidesBackButton=YES; //隐藏头部右边 self.navigationItem.rightBarButtonItem.customView.hidden=YES;
7:如要给UICollectionViewController视图设置背景图
UIImage *image=[UIImage imageNamed:@"AppBg"]; self.collectionView.layer.contents=(id)image.CGImage;
8:可以在其它地方修改rootViewController
UIWindow *window = [UIApplication sharedApplication].keyWindow;
window.rootViewController = [[HVWTabBarViewController alloc] init];
9:新浪微博授权登录报Warning: Attempt to present on whose view is not in the window hierarchy!
IntroductoryViewController *introductory=[mainStoryboard instantiateViewControllerWithIdentifier:@"introductoryview"]; UINavigationController *rootNavigationController=[[UINavigationController alloc] initWithRootViewController:introductory]; self.window.rootViewController=rootNavigationController; 主要问题是a跳转到b,然后b放一个授权新浪微博的按键,增加一个UINavigationController,然后在a跳转到b时用nav跳转: UIStoryboard *mainStoryboard=[UIStoryboard storyboardWithName:@"Main" bundle:nil]; LoginViewController* loginviewControll=[mainStoryboard instantiateViewControllerWithIdentifier:@"loginviewcontroller"]; [self.navigationController pushViewController:loginviewControll animated:YES];
10:在引入第三方TcweiboSDK报linker command failed with exit code1(use -v to see invocation)
是因为重复引入libTCWeiboSDK这个类库,TARGETS-PROJECT-Build Phases-Link Binary With Libraries中,有三个libTcweiboSDK,可以删除libTCWeiboSDK-I386.a
11:NSUserDefaults存放民NSDictionary
注意:NSUserDefaults支持的数据类型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系统定义的数据类型。 本次遇到的问题:当NSDictionary里面的值为null时,要写入NSUserDefaults会报异常(attempt to insert non-property list object); 解决方式:把字典中的值进行过滤处理,为空的转化成字符串的空值;代码如下(创建一个扩展类): @implementation NSDictionary(Common) -(NSDictionary *) changeDictionaryNotNill { NSMutableDictionary *muResult=[[NSMutableDictionary alloc]init]; NSEnumerator *enumerator=[self keyEnumerator]; id key; while ((key=[enumerator nextObject])) { id value=[self objectForKey:key]; if ((NSNull *)value==[NSNull null]) { [muResult setObject:@"" forKey:key]; } else { [muResult setObject:value forKey:key]; } } return muResult; } @end