您的位置:首页 > 移动开发 > IOS开发

苹果开发之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];

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: