小技巧积累 objective-c,持续更新

1.  写代码时字符串太长 怎么换行:NSString *string = @"ABCDEFGHIJKL" \ 

                                        "MNOPQRSTUVsWXYZ";


2.使用快照:如果你打算对工程做一些比较大或者复杂的改动,你需要更改许多的地方,但是你又不确定你改完了是不是会出问题,此时你可以在工程还没有改动之前,处于最佳状态的时候,点击菜单栏的File---Make Snapshot,为工程制作一个快照,一旦修改出现了问题,可以点击菜单File---Snapshots,然后在弹出的对话框中点击 Restore直接回滚到快照保存的状态。 

(不错,挺好用的)


3.

如何实现按一下button换另一张图片 

[你的button setImage:[UIImage imageNamed:@"图片名1"] forState:UIControlStateNormal];//未按下时调用的图片
[你的button setImage:[UIImage imageNamed:@"图片名2"] forState:UIControlStateHighlighted];//这个就是按下时调用的图片


4.
我想给toolbar加入背景图片
UIImageView *barBackgroudView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
barBackgroudView.image = [UIImage imageNamed:@"bg.png"];
[bar insertSubview:barBackgroudView atIndex:0];
[barBackgroudView release];
5.怎么给UITableViewCell添加背景图片 
[cell.backgroundView setFrame:CGRectMake(0, 0, 320, 66)];
    cell.backgroundColor=[UIColor clearColor];
    cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"home.png"]];     

6.

cell.textLabel.backgroundColor= [UIColor clearColor]; 这样可以把label的背景设置为透明的

7.将label显示再UITableViewCell 的中间

NSString* titleCellIdentifier = [NSStringFromClass([self class]) stringByAppendingString:@"title"];

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:titleCellIdentifier];

if (cell == nil) {

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:titleCellIdentifier] autorelease];

}

    CGRect cellFrame=cell.frame;

    CGRect labelFrame =CGRectMake(cellFrame.size.width/2-50, cellFrame.origin.y+10, 100, 30);

    UILabel *lab = [[UILabel alloc]initWithFrame:labelFrame];

    lab.backgroundColor=[UIColor clearColor];

    lab.text = @"labeltext";

    lab.numberOfLines = 0;

    [cell addSubview:lab];

    [lab release];

return cell;


8.这样可以打出方法名

/* Perform a task here */NSLog(@"%s", __FUNCTION__); 



9.

if (cell==nil) {

               NSArray *nib=[[NSBundlemainBundle]loadNibNamed:@"WorkExperienceCell"owner:selfoptions:nil];

               if ([nibcount]>0) {

                    cell=self.basicListTableCell;

                }

               else

                {

                   NSLog(@"failed to load nib file");

                }

            }

basicListTableCell界面有两个不同的连接切一个连接已删除时, NSArray *nib=[[NSBundle mainBundleloadNibNamed:@"WorkExperienceCell" owner:selfoptions:nil];报错,这句话报错,但是没有错误信息,害我一顿好找


10.用自定义的TableViewCell来完成tableview的展现,应为tableview是圆角的,我内部的控件会冒出来,很难看,这个时候,选择 clipSubView即可。经验啊,木有拌饭,没碰到过这个问题,就是不会。


11.tableView:viewForFooterInSection:   不会生效,如果我设置

-(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

{

   return0;

}

12.看样子,这是debug的时候才能进来执行的意思

#ifdef DEBUGX

        NSLog(@"%s",__FUNCTION__);

        NSLog(@"imageScale: %f",imageScale);

//        NSLog(@"imageRect: %@", imageRect.size);

#endif

地下是图片


13.

判断是phone 还是pad的方法,在application:didFinishLaunchingWithOptions里面用一个全局变量保存

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{


    if ([[UIDevicecurrentDevice]userInterfaceIdiom] ==UIUserInterfaceIdiomPhone) {

        myNumber = [[NSNumberalloc]initWithBool:1];

        [globalVariablessetValue:myNumberforKey:@"IsPhone"];

      }


}




14.

[[UIApplicationsharedApplication]setNetworkActivityIndicatorVisible:YES];

设置左上角的NetworkActivity


15. UITableViewCell 内容可以居中显示吗

很容易想到

解决方式1: 自定义
解决方式2: label
解决方式3: 字符串前面加几个空格

其实第二种方式很2,当横竖屏切换,上下拖拽,重绘的时候,如果没有删除之前添加的label,会出现两个label。我也是搜了一下,才完美而简单地解决这个问题。
但是没有最后一个简单,给力,

cell.textLabel.textAlignment=UITextAlignmentCenter;
但是这个方法仅限当cell的style是default的时候有效。 

<搜到的,呵呵》


16.

ios中UITableViewCell选中后的颜色设置

1 //无色
2 cell.selectionStyle=UITableViewCellSelectionStyleNone;
3 //蓝色,也就是系统默认的颜色
4 cell.selectionStyle=UITableViewCellSelectionStyleBlue;
5 //灰色
6 cell.selectionStyle=UITableViewCellSelectionStyleGrap;
详情请参考:
  http://www.cnblogs.com/chen111/archive/2012/08/25/2655795.html


17.

String Format Specifiers

o learn about formatting strings with system-independent formatspecifiers in Objective-C, 


https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

18,想在6底下替换这个

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{}

发现转屏之后,不调用这个,问了同事才知道,原来,这个sub view是别的parent view 作为一个subview加进来的,如果转了之后,这个sub view 里面不会被触发,parent view 里面的会被触发。

19.

如何获取当前视图中成为第一响应者的组件,并取消注册

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; 
UIView *firstResponder = [keyWindow performSelector:@selector(firstResponder)];
[firstResponder resignFirstResponder];

20.有点时候会犯二,

[btn setImage:spreadImage forState:UIControlStateNormal];

这才是正确的写法,让

            btn.imageView.image 见鬼去吧,同理,还有title


21.项目里面iphone4s 的 ios6上面,莫名其妙view会被状态栏,侵占一部分,煞是苦恼。各种nslog view的frame之后,发现状态栏为0000,一般的页面,还好,有nib文件的viewcontroller可以设置各个元素。
点击 UITabBarController 点击more 按钮触发的那个按钮,该宗默版啊总莫办,搜索了之后,自己也尝试,就在原来的代码里面加了个if is phone的判断,然后判断一下状态栏,然后设置了一下view。center,ok

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController*)viewController

{

CATransition* myanimation = [CATransition animation];

[myanimation setDuration:0.85f];

[myanimation setType:kCATransitionFade];

[myanimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];

[tabBarController.view.layer addAnimation:myanimation forKey:@"switchView"];

    if (ISPHONE) {

        if ([[UIApplication sharedApplication ] statusBarFrame].size.height==0) {

            viewController.view.center=CGPointMake(viewController.view.center.x, viewController.view.center.y+20.0f); 

        }

    }

    return YES;

}


22.
如果在选装的时候,想处理界面,个人推荐用这种方式。

//    [[NSNotificationCenter defaultCenter] addObserver:self

//                                             selector:@selector(orientationChanged:)

//                                                 name:UIDeviceOrientationDidChangeNotification

//                                               object:nil];

兼容5,6

不过项目里面,很多情况,也用到这种方法

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

{

    if (ISPHONE) {

        return;

    }

    if (toInterfaceOrientation==UIInterfaceOrientationPortrait) {

        DerictionV = 1;

        self.view=self.myPortrait;

        self.view.transform=CGAffineTransformIdentity;

        self.view.transform=CGAffineTransformMakeRotation(degreesToRadians(0));

        self.view.bounds=CGRectMake(0.0, 0.0, 768.0, 1024.0);

        

    }

    if (toInterfaceOrientation==UIInterfaceOrientationLandscapeLeft) {

        DerictionV = 0;

        self.view=self.myLandscape;

        self.view.transform=CGAffineTransformMakeRotation(degreesToRadians(-90));

        self.view.bounds=CGRectMake(0.0, 0.0, 1024.0, 768.0);

    }

    if (toInterfaceOrientation==UIInterfaceOrientationPortraitUpsideDown) {

        DerictionV = 1;

        self.view=self.myPortrait;

        self.view.transform=CGAffineTransformMakeRotation(degreesToRadians(180));

        self.view.bounds=CGRectMake(0.0, 0.0, 768.0, 1024.0);

    }

    if (toInterfaceOrientation==UIInterfaceOrientationLandscapeRight) {

        DerictionV = 0;

        self.view=self.myLandscape;

        self.view.transform=CGAffineTransformMakeRotation(degreesToRadians(90));

        self.view.bounds=CGRectMake(0.0, 0.0, 1024.0, 768.0);

    }

    if (carousel) {

        [self rotateCarousel];

    }

    

}




23.
UIBarButtonItem   字体大小  title属性

把这段话删掉

  self.titleItem.title = [receiveDatavalueForKey:@"formTitle"];

加上这么一段代码

 UILabel* titleLabel =[[UILabel alloc] initWithFrame:CGRectMake(0, 0 , 218, 44)];

    titleLabel.backgroundColor = [UIColorclearColor];  //设置Label背景透明

    titleLabel.font = [UIFontboldSystemFontOfSize:13];  //设置文本字体与大小

    titleLabel.textAlignment =UITextAlignmentCenter;

    titleLabel.text=[receiveDatavalueForKey:@"formTitle"];

    self.titleItem.customView=titleLabel;

    [titleLabel release];

24.svn  更换ip地址,还有很多没有更改没有迁入,怎么办。

cd 到svn的目录

通过 svn info获取当前的地址

Path: .
URL: http://10.3.20.47:8081/svn

svn switch --relocate 原始ip  新的ip

svn switch --relocate http://10.3.20.47:8081/svn/   http://10.3.20.47:8081/svn/   


25.一个挺好使的宏,可以判断是否是pad?不知minipad之类的,改怎么处理。

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

26..h文件中加  UITapGestureRecognizer *tap;
.m中加这个
-(void)textViewDidBeginEditing:(UITextView *)textView
{
    //添加了一个手势  但是要记得移除
    tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(keyBoardMiss) ];
    [tabView addGestureRecognizer:tap];
    [tap release];
}
-(void) keyBoardMiss
{
    [userMsg_text resignFirstResponder];
    
    [tabView removeGestureRecognizer:tap];//手势页面的移除
}

tablevie  增加手势的识别。

后期发现,这样子,就无法出发,tableviewcell 的点击事件了




26.

Warning: no rule to process file '$(PROJECT_DIR)/UIView-ViewFrameGeometry.h' of type sourcecode.c.h for architecture armv7


原因: Target里Compile Sources里含有头文件 了,那里面不需要头文件
解决方法: 从Target里Compile Sources里删除头文件



Use Compiler Flags to Enable and Disable ARC

You enable ARC using a new  -fobjc-arc  compiler flag. You can also choose to use ARC on a per-file basis if it’s more convenient for you to use manual reference counting for some files. For projects that employ ARC as the default approach, you can disable ARC for a specific file using a new -fno-objc-arc  compiler flag for that file.

我试了一下 fno-objc-arc ,还挺好使

28.如果想强制执行,drawRect方法,调用

    [self.myViewsetNeedsDisplay];

方法即可。


29.

toolbar 的  UIBarButtonItem 会自动扩大可点击区域,查了一下,应该是一个防止用户点击不到的一个设置。但是也会误触。试了一下,比较简单的方法是用 这个方法

UIBarButtonItem *leftButton = [[UIBarButtonItemalloc]initWithCustomView:barButton];


30.一般喜欢用类似于

for (NSDictionary *dicin blocks )

用这种方式,循环,但是,一旦需要用到dic 在array 里面的的索引了,就改成for(int i=0 ;i<count;i++)了,今天发现可以用这个方法

sectionNumber=[blocks indexOfObject:dic];

其实早就发现了,偷懒,没有查,查一下就会了。


31.用这个方法发现,手机翻转的时候,底下的工具栏是会改变高度的。

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

{

    NSString *frameString=NSStringFromCGRect(self.navigationController.toolbar.frame);

    NSLog(@"frameString:%@",frameString);

}

2013-06-23 14:11:43.598 MobileOA[15916:19d03] frameString:{{0, 288}, {480, 32}}

2013-06-23 14:11:46.180 MobileOA[15916:19d03] frameString:{{0, 436}, {320, 44}}




32.用这个方法,可以给uiview,加上圆角

#import <QuartzCore/QuartzCore.h>


    secondTextView.layer.cornerRadius=6;

    secondTextView.layer.masksToBounds=YES;

    secondTextView.layer.borderWidth=0.3;


33

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值