苹果开发之Cocoa编程(第三版) 第5章 Target/Action

来源:互联网 发布:专业八字算命软件 编辑:程序博客网 时间:2024/05/18 00:04

1.NSButton、NSSlider、NSTextView、NSColorWell等控件都是NSControl的子类。每个控件都包含target和action。target是一个指向其他对象的指针。action是会发给target的message(selector)。给两个按钮设置的target和action:把Foo对象设置成两个按钮的target,一个按钮的action设置成seed:,另外一个设置成generate:(图5.1)

Figure 5.1. A Button Has a Target and an Action Foo NSButton target action = seed: - (void)

当用户和控件交互时,就会给它们的target发送action消息。例如,点击一个按钮,将会给它的target发送action消息

Figure 5.2. The Button Sends a Message FOO NSButton target action seed: - (void)

action方法接收一个参数:发送者。该参数可以让接收者知道是哪一个控件发送了这个action消息

Figure 5.3. Inheritance Diagram for NSControl NSiVinäoÜ L — YSButton state : BOOL [View full s iæ — — — — — — — Isan Object: NSObject I init, retain, release, dealloc. etc. hhöits from ER2sponäer— —I Handles events: mouseDown:, etc. — Appears in a window: NSViö - — drawRect:, window, etc. irvtsirorn NSCon7r01 Has a target and an action: — — — — — -I setTarget:, inherits from —N"xtFiZlä stringValue : NSString • floatValue : float

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 (weakIBOutlet 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];//这种方法设置按钮的onoff状态。用来使复选框勾选或不勾选,设置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。例如,要设置一个按钮的actiondrawMickey:,可以:


SELmySelector;

mySelector = @selector(drawMickey:);

[myButton setAction:mySelector];

如果要在运行时查找selector,使用NSSelectorFromString()函数:


SELmySelector;

mySelector = NSSelectorFromString(@"drawMickey:");

[myButton setTarget:someObjectWithADrawMickeyMethod];

[myButton setAction:mySelector];


 




0 0
原创粉丝点击