iOS 开发问题集锦

转:点击打开链接

 

1、键盘上的斜杠键坏掉了,怎么样用快捷键进行注释呢?

首先在Xcode中注释的默认快捷键为:command+/;

其次可以自行修改快捷键:Xcode>Preferences...>Key Bindings,如下图

2、Xcode中的导航区域关闭了,如何调出来?如下图:

在工具栏的右侧有3个View选择按钮,选择第一个,左侧的导航区域就会出现,如下图中红框选中区域:

对于Xcode编程环境的讲解,推介一本书”《iOS游戏开发入门经典》,清华大学出版社出版,刘凡译“,此书的第二章有很详细的讲解。

3、Xcode中的工具栏不见了,退出Xcode后再次进来还是没有,怎么调出来呢?如下图:

如果如果工具栏可见,上图蓝色选中区域为Hide Toolbar,如果不可见,则为Show Toolbar。

4、一个View中,有一张背景图,还有几个Label与Button,但是运行时只显示背景图,没有显示Label和Button。

后来发现是背景图放在了最上层,把其他内容给挡住了。

我在这里说一下背景图的设置,我知道的有两种方式:

  1)写代码:[self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"bg"]]];

  2)直接拖图片到xib的View上,不过图片一定要放在view的最底层,如下图:

  

5、怎么修改UITextField的高度?

UITextField默认的高度是没办法修改的,不过可以修改一下Border Style,如下图除了最后一种(默认)不可修改高度以外,其他三种都可以。

一般在项目中,UITextField的边框都会由UI来设计,所以选择第一种无边框即可。

6、在头文件中写如下代码时,在实现文件中调用的是哪一个blue?

1 @interface testController:UIViewController
2 {
3     buleController *bule;
4 }
5 property(nonatomic, strong) buleController *bule;

  1) 直接 写 bule 的时候 是调用的@interface testController:UIViewController { buleController *bule; }这里边的blue;

  2) 写 _bule 与 self.bule 的时候,调用的是 property(nonatomic, strong) buleController *bule;

  _bule 的写法与@interface testController:UIViewController { buleController *bule; }调用这里边的blue类似

  self.bule 是调用的 property(nonatomic, strong) buleController *bule; 的get、set方法

7、代码样式发生了变化,默认为Basic,根据个人喜好,重设为Default,如下图所示:

设置前与设置后的对比图:

设置前

设置后

也可以根据自己的喜好设置成别的。

8、.xib文件上的视图没有自动显示虚拟边框,为了方便对其,需要手动设置一下,设置方式Editor -> Canvas -> Show Bounds Rectangles,如下图所示:

设置前与设置后的对比图:

设置前

设置后

暂时就遇到这些问题,如果有新设置,再补上。以下部分是一些其他问题。

9.1、UIBarButtonItem 和 NavigationItem 的区别是什么?

UIBarButtonItem 包含在 NavigationItem里边, 就是导航条左右的那些按钮。

NavigationItem 是一个容器,它可以容纳左右按键、返回键与标题视图等。

9.2、[self.navigationBar addSubView:lable]; 和 self.navigationItem.titleView=label; 这两个等价吗?

这个不做回答,大家试一试就知道啦。遇到问题,多练习,多写代码,多试两遍就出来了,记忆还深刻呢。

10、如何在app的icon左上角显示圆形背景的数字?

在AppDelegate.m中的applicationDidEnterBackground:方法中现实,如下

/*
 说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
 **/
- (void)applicationDidEnterBackground:(UIApplication *)application
{
     [[UIApplication sharedApplication] setApplicationIconBadgeNumber:5];
}

11、NSClassFromString 类如何使用?

NSClassFromString是一个很有用的东西,尤其在进行iPhone toolchain的开发上。

正常来说,

id myObj = [[NSClassFromString(@"MySpecialClass") alloc] init];

id myObj = [[MySpecialClass alloc] init];

是一样的。但是,如果你的程序中并不存在MySpecialClass这个类,下面的写法会出错,而上面的写法只是返回一个空对象而已。

因此,在某些情况下,可以使用NSClassFromString来进行你不确定的类的初始化。

比如在iPhone中,SKStoreProductViewController 可能就会出现这种情况,所以在你需要使用SKStoreProductViewController时,

最好使用:[[NSClassFromString(@"SKStoreProductViewController") .....]]

而不要直接使用 [SKStoreProductViewController ...]这种写法,因为 SKStoreProductViewController 在iOS6以下的版本并不支持。

NSClassFromString的好处是:

a 弱化连接,因此并不会把没有的Framework也link到程序中。

b 不需要使用import,因为类是动态加载的,只要存在就可以加载。因此如果你的toolchain中没有某个类的头文件定义,而你确信这个类是可以用的,那么也可以用这种方法。

12、iPhone来电的时候背后的闪光灯不停的闪

设置里面选通用,然后选辅助功能,然后关闭LED闪烁就可以了。

13、TBXML 如何遍历指定元素?

/**
 TBXML 解析xml
 element : 遍历指定的元素
 */
- (void) traverseElement:(TBXMLElement *)element {
    do {
        // 显示XML元素名称
        NSLog(@"%@",[TBXML elementName:element]);
            
        // 获取到当前节点的第一个属性
        TBXMLAttribute * attribute = element->firstAttribute;
            
        // 如果属性是有效的
        while (attribute) {
            // 在log窗口中显示属性的名称和值
            NSLog(@"%@->%@ = %@",[TBXML elementName:element],[TBXML attributeName:attribute], [TBXML attributeValue:attribute]);
                
            // 获取下一个属性
            attribute = attribute->next;
        }
            
        // 递归遍历下一个子元素
        if (element->firstChild) [self traverseElement:element->firstChild];
        
    // 获取同级元素
    } while ((element = element->nextSibling));
}

14、如何取消UITextAlignmentCenter的警告呢?烦死人了...   如下图:

修改UITextAlignmentCenter 为 NSTextAlignmentCenter

15、设置App启动页,如下图:

启动页图片分为3中像素:320*480、640*960、640*1136。

首先拖动图片到上图3中相应的位置,然后在工程的AppDelegate.m中的下列方法中设置:

/*
 说明:当程序载入后执行
 **/
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //延时3秒,以便用户看清楚启动页
    [NSThread sleepForTimeInterval:3.0];
    
    // 添加启动页
    UIImageView *splashScreen = [[UIImageView alloc] initWithFrame:self.window.bounds];
    if (iPhone5) {
        splashScreen.image = [UIImage imageNamed:@"Default-568h"];
    }else{
        splashScreen.image = [UIImage imageNamed:@"Default"];
    }
    [self.window addSubview:splashScreen];
    
    // 启动页渐变效果
    [UIView animateWithDuration:0.5 animations:^{
        CATransform3D transform = CATransform3DMakeScale(1.0, 1.0, 1.0);
        splashScreen.layer.transform = transform;
        splashScreen.alpha = 0.0;
    } completion:^(BOOL finished) {
        [splashScreen removeFromSuperview];
    }];
    
    [self.window makeKeyAndVisible];
    
    return YES;
}

上述代码片段中,iPhone5是一个宏定义,如下:

#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

16、点击背景视图,收起输入法。

在 - (void)viewDidLoad 中添加如下代码:

// 设置 self.view GestureRecognizer
    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleBackgroundTap:)];
    tapRecognizer.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapRecognizer];

然后,编写 handleBackgroundTap: 方法

/*
 点击背景时关闭键盘
 **/
-(void)handleBackgroundTap:(UITapGestureRecognizer *)sender{
    [self.userName resignFirstResponder];
    [self.userPassword resignFirstResponder];
}


17、在ARC工程中使用非ARC文件时的编译设置:添加: -fno-objc-arc 方式如下。

18、获取字符串内所有匹配子字符串。

方法一:

    NSString *string1=@"abcdefabcdefabcdefabcdefbcd";
    NSString *string2=@"bcd";
    NSArray *array=[string1 componentsSeparatedByString:string2];
    NSMutableArray *arrayOfLocation=[NSMutableArray array];
    
    int d=0;
    for (int i=0; i<array.count-1; i++) {
        NSString *string = array[i];
        NSNumber *number = [NSNumber numberWithInt:d += string.length];
        d += string2.length;
        [arrayOfLocation addObject:number];
    }
    
    NSLog(@"%@", arrayOfLocation);

2014-05-01 16:56:10.085 Test[635:70b] (

    1,

    7,

    13,

    19,

    24

)

方法二:

    NSString *str = @"abcdefabcdefabcdefabcdefbcd";
    NSString *copyStr = str;
    
    while ([copyStr rangeOfString:@"bcd"].location != NSNotFound) {
        
        NSRange  range  = [copyStr rangeOfString:@"bcd"];
        NSLog(@"location:%d", range.location);
        copyStr = [copyStr stringByReplacingCharactersInRange:NSMakeRange(range.location, range.length) withString:@"XXX"];
    }

2014-05-01 16:56:10.083 Test[635:70b] location:1

2014-05-01 16:56:10.084 Test[635:70b] location:7

2014-05-01 16:56:10.084 Test[635:70b] location:13

2014-05-01 16:56:10.085 Test[635:70b] location:19

2014-05-01 16:56:10.085 Test[635:70b] location:24





 

posted @ 2014-03-31 22:17  Forrest.Wang  阅读(151)  评论(0编辑  收藏  举报