我的学习日志003:“文字长度--button与label的交互”程序
交代一下我做程序的工具:mac os x虚拟机10.9.3 Xcode6 百度^-^ 参考书iPhone30天精通(本书已经过时,但是还有一定的参考价值,可以引导正确的学习方向)。
没什么新的知识点,直接放步骤和代码。
XCode新建SingleView程序,viewControllor.h代码如下:
#import <UIKit/UIKit.h>
#import<Foundation/Foundation.h>
@interface viewController:UIViewController{
IBOutlet UITextField *textField;
IBOutlet UILabel *label;
}
@property(nonatomic,retain) UITextField *textField;
@property(nonatomic,retain) UILabel *label;
-(IBAction)Click;
@end
viewControllor.m文件
#import "viewController.h"
@implementation viewController
@systhesize textField,label;
-(void)viewDidLoad{
[super viewDidLoad];
label.text = @"请输入文字";
}
-(IBAction)Click{
//这个方法是每一次点击button的时候调用的
int count = textField.text.length;
if(count>20){
label.text = @"输入的含空格和标点符号在内的文字超出20个";
textField.text = NULL;
}
else{
NSString *result = [NSString stringWithFormat:@"输入的文字个数为%d",count];
label.text = result;
textField.text = NULL;
}
}
-(void)didReceiveMemoryWarning{
[super didReceivedMemoryWarning];
}
storyboared处理:
首先要创建textField,button,label控件,因为前面的代码已经创建了这几个控件的对象了,然后选分别中每一个控件,按住ctrl键,鼠标左键拖向.h文件里面的相应的对象。
运行就OK了。这一步可能有不懂得,直接上图,看图自己操作就应该可以了,不会这种方法的注意图中的细节。
说一下我自己遇到的问题与不理解的地方:
遇到的问题:
1.运行的时候遇到警告:The simulator can‘t be launched.....大概就是说我模拟器别的程序还用着呢,我怎么可以再运行别的程序呢。这种时候只要强制关一下XCode就可以了,
强制关闭快捷键是commend+Q(虚拟机没有commend按键,win键代替即可)。
2.我在写viewController.h文件的时候忘了加上"#import<Foundation/Foundation.h>"这句话,导致我的程序出现“Thread1:signalSIGABRT...”这样的警告,所以以后写程序的时候要细心。
3.在打开程序的时候XCode还警告我“No signing identity dound”这是一个签名警告,意思就是没有签名标识。如果是用模拟器调程序的话没有关系,可以不用管它。
待解决的知识点:
@prperty与@systhesize
我在我的第二篇日志里面总结了一下,但是现在看来,还是太菜。http://blog.csdn.net/v7595v/article/details/46833209
现在只总结@prperty与@systhesize,贪多嚼不烂,如下:
Objective-C语言关键词,与@synthesize配对使用。xcode4.5以及以后的版本,@synthesize可以省略
下面以 Person 类为例:
在. h 文件中:
@interface Person : NSObject
{
NSString * _name;
NSString * _sex;
NSInteger _age;
}
@property NSString * name;
@property NSString * sex;
@property NSInteger age;
表示声明了三个属性: name,sex,age, 默认生成3个对应的 setter 和 getter 方法
在. m 文件中:
@implementation Person
@synthesize name = _name;
@synthesize sex = _sex;
@synthesize age = _age;
@end
表示实现3个 setter 和 getter 方法,其中 name = _name 表示说在 getter 和 setter 方法中操作的实例变量是_name,如果省略了_name,_age,_sex, 那么会在. h 文件中生成同名的实例变量 name,sex,age(注意:这里并没有下划线),此时生成的 setter 和 getter 方法所操作的实例变量是 name,sex,age, 所以_name,_sex,_age 并没有被操作.
在 ios5.0后,@synthesize也可以省略不写,此时在. h 文件中只写@ property 即可,编译器会自动生成相应的实例变量,实例变量的名字是属性名称前加下划线.
这是我在百度百科copy过来的资料,按照它的说法的话,我就可以去掉viewController.h文件里面的@interface{}里面定义的实例变量,同时去掉@systhesize,只写@property就可以了。But,去掉了@systhesize虽然没关系,但是去掉@interface{}里面的实例变量之后,用ctrl无法将storyboard和.h文件里面的@property相关联。所以只能加上@interface{}里面定义的实例变量。还有一点,我加入的实例变量是与@property修饰的变量名字是相同的,没有用"_"去区分,然而也没有错误,那我便暂时先按这种方便的方式去写代码。
IB 就是Interface Builed:
书上和网上总是说IB就是InterfaceBuiled,关于IBAction和IBOutlet我已经在我程序日志的第一篇里面解决了这一问题,http://blog.csdn.net/v7595v/article/details/46831265
什么是InterfaceBuiled?
看了百度百科http://baike.baidu.com/link?url=WUPoCb4zLKQuhj8NB46slu4phwAxGc0v56FyahESMEDkViA833E3zZQqUyqI-NULGwZHd-3sWuTziY3DCJqbea
IB再深究已无意义,了解一下作罢。
版权声明:本文为博主原创文章,未经博主允许不得转载。