苹果开发之Cocoa编程(第三版) 第5章 Target/Action
2017-05-15 14:30
330 查看
1.NSButton、NSSlider、NSTextView、NSColorWell等控件都是NSControl的子类。每个控件都包含target和action。target是一个指向其他对象的指针。action是会发给target的message(selector)。给两个按钮设置的target和action:把Foo对象设置成两个按钮的target,一个按钮的action设置成seed:,另外一个设置成generate:(图5.1)
当用户和控件交互时,就会给它们的target发送action消息。例如,点击一个按钮,将会给它的target发送action消息
action方法接收一个参数:发送者。该参数可以让接收者知道是哪一个控件发送了这个action消息
2.常用的NSControl子类
使用控件前,简单学习一下3个常用用户控件类:NSButton、NSSlider和NSTextField。
第一步:在AppDelegate.h上关联xib指定控件。
第二步:在AppDelegate.m上关联xib指定按钮后调用控件的方法
NSButton:
- (void)setEnabled:(BOOL)yn;//激活按钮。非激活的按钮是灰色的
- (int)state;//如果按钮是on状态,返回NSOnState(1),为off状态时,返回NSOffState(0)
- (void)setState:(int)aState;
第一步:在AppDelegate.h上关联指定按钮。
@property (weak) IBOutlet NSButton
*btnX;
第二步:在AppDelegate.m上关联Start按钮后调用下面方法
eg:
- (IBAction)btnStart:(id)sender
{
[_btnX setEnabled:NO];
}
a.-(void)setEnabled:(BOOL)yn
[_btnX setEnabled:NO];//NO是非激活的按钮,运行app后点击后变灰色,以后不可以再点击
b.-(int)state
NSLog(@"%ld",(long)[_btnStart
state]);//如果是on状态,点击按钮,方法返回NSOnState(1)为1;如果是off状态,点击按钮,方法返回NSOffState(0)为0。对于复选框,可以通过这种方法来检查复选框是否被勾选。
c.-(void)setState:(int)aState
[_btnStart setState:0];//这种方法设置按钮的on和off状态。用来使复选框勾选或不勾选,设置NSOnState为勾选,设置NSOffState为不勾选。
NSSlider:
NSSlider实例对象可以是横向或纵向的。可以设置成当拖动时连续不断地给target发送消息,或者只有当用户松开鼠标时才发送消息。还可以设置滚动条的标尺,把拖动
- (void)setFloatValue:(float)x;//移动滚动条到位置x
- (float)floatValue;//得到当前滚动条的位置
NSTextField:让用户输入单行文本
- (NSString *)stringValue;
- (void)setStringValue:(NSString *)aString;//这两个方法用来获取和设置文本框中的文本
- (NSObject *)objectValue;
- (void)setObjectValue:(NSObject *)obj;//获取和设置文本框内容数据的任意类型的对象
3.通过代码来设置target:
控件的action是一个selector:
- (void)setAction:(SEL):aSelector;
如何获取一个selector?使用Objective-c编译器指令@selector告诉编译器来查找一个selector。例如,要设置一个按钮的action为drawMickey:,可以:
SELmySelector;
mySelector = @selector(drawMickey:);
[myButton setAction:mySelector];
如果要在运行时查找selector,使用NSSelectorFromString()函数:
SELmySelector;
mySelector = NSSelectorFromString(@"drawMickey:");
[myButton setTarget:someObjectWithADrawMickeyMethod];
[myButton setAction:mySelector];
当用户和控件交互时,就会给它们的target发送action消息。例如,点击一个按钮,将会给它的target发送action消息
action方法接收一个参数:发送者。该参数可以让接收者知道是哪一个控件发送了这个action消息
2.常用的NSControl子类
使用控件前,简单学习一下3个常用用户控件类:NSButton、NSSlider和NSTextField。
第一步:在AppDelegate.h上关联xib指定控件。
第二步:在AppDelegate.m上关联xib指定按钮后调用控件的方法
NSButton:
- (void)setEnabled:(BOOL)yn;//激活按钮。非激活的按钮是灰色的
- (int)state;//如果按钮是on状态,返回NSOnState(1),为off状态时,返回NSOffState(0)
- (void)setState:(int)aState;
第一步:在AppDelegate.h上关联指定按钮。
@property (weak) IBOutlet NSButton
*btnX;
第二步:在AppDelegate.m上关联Start按钮后调用下面方法
eg:
- (IBAction)btnStart:(id)sender
{
[_btnX setEnabled:NO];
}
a.-(void)setEnabled:(BOOL)yn
[_btnX setEnabled:NO];//NO是非激活的按钮,运行app后点击后变灰色,以后不可以再点击
b.-(int)state
NSLog(@"%ld",(long)[_btnStart
state]);//如果是on状态,点击按钮,方法返回NSOnState(1)为1;如果是off状态,点击按钮,方法返回NSOffState(0)为0。对于复选框,可以通过这种方法来检查复选框是否被勾选。
c.-(void)setState:(int)aState
[_btnStart setState:0];//这种方法设置按钮的on和off状态。用来使复选框勾选或不勾选,设置NSOnState为勾选,设置NSOffState为不勾选。
NSSlider:
NSSlider实例对象可以是横向或纵向的。可以设置成当拖动时连续不断地给target发送消息,或者只有当用户松开鼠标时才发送消息。还可以设置滚动条的标尺,把拖动
- (void)setFloatValue:(float)x;//移动滚动条到位置x
- (float)floatValue;//得到当前滚动条的位置
NSTextField:让用户输入单行文本
- (NSString *)stringValue;
- (void)setStringValue:(NSString *)aString;//这两个方法用来获取和设置文本框中的文本
- (NSObject *)objectValue;
- (void)setObjectValue:(NSObject *)obj;//获取和设置文本框内容数据的任意类型的对象
3.通过代码来设置target:
控件的action是一个selector:
- (void)setAction:(SEL):aSelector;
如何获取一个selector?使用Objective-c编译器指令@selector告诉编译器来查找一个selector。例如,要设置一个按钮的action为drawMickey:,可以:
SELmySelector;
mySelector = @selector(drawMickey:);
[myButton setAction:mySelector];
如果要在运行时查找selector,使用NSSelectorFromString()函数:
SELmySelector;
mySelector = NSSelectorFromString(@"drawMickey:");
[myButton setTarget:someObjectWithADrawMickeyMethod];
[myButton setAction:mySelector];
相关文章推荐
- 第5章 target/action
- 关于target...action中的一点体会
- Target-Action
- UI一揽子计划 5 (Target: Action: 、Protocol Delegate、 UIImageView 、手势识别器)
- [Cocoa] Target & Action, 另外一种响应事件的方法
- Target-Action in UIKit
- Target/Action 设计模式
- delegate / target, action / block
- Objective-C释解 Target-Action模式
- 如何清除控件的Target-Action
- iOS Target-Action
- swift target action模式
- UIControl介绍以及Target-Action机制
- iOS中touches事件,addtarget ...action和GestureRecognizer详解
- target-action设计模式--主要为Button的方法重写
- addTarget:action:forControlEvents(UIControl)
- Target-action:
- Target-Action
- UI - Target-Action设计模式
- target-action设计模式