Cocoa学习笔记(2):delegate
18 Aug 2012接着用上一节朗读的例子来演示。
如果你想让程序在朗读的时候使start按钮变灰,而stop按钮可以点击,那就可以通过设置speechSynth的delegate来实现效果。
speechSynth将委托(delegate)给自己,即AppController。
调用speechSynth的委托通过AppController来进行其他操作,比如设置按钮变灰。
不知道我说没说明白,我是从C#那里的委托来理解Obj-C的委托的,大致差不多吧,不对的地方帮忙提出来哦。
效果如下:
- (id)init{ NSLog(@"init"); speechSynth=[[NSSpeechSynthesizer alloc] initWithVoice:nil]; [speechSynth setDelegate:self]; return self; }
对于NSSpeechSynthesizer的Delegate函数有:
– speechSynthesizer:willSpeakWord:ofString:
– speechSynthesizer:willSpeakPhoneme:
– speechSynthesizer:didEncounterErrorAtIndex:ofString:message:
– speechSynthesizer:didEncounterSyncMessage:
– speechSynthesizer:didFinishSpeaking:
这些可以在Document查询。
关系图:
// // AppController.m // SpeakLine // // Created by 哲 于 on 12-8-18. // Copyright (c) 2012年 哈尔滨理工大学. All rights reserved. // #import "AppController.h" @implementation AppController - (id)init{ NSLog(@"init"); speechSynth=[[NSSpeechSynthesizer alloc] initWithVoice:nil]; [speechSynth setDelegate:self]; return self; } - (IBAction)sayIt:(id)sender{ NSString *string=[textField stringValue]; if([string length]==0){ NSLog(@"The textField %@ is of zero-length",textField); return; } [speechSynth startSpeakingString:string]; NSLog(@"Have started to say:%@",string); } - (IBAction)stopIt:(id)sender{ [speechSynth stopSpeaking]; NSLog(@"Have stopped"); } - (void)speechSynthesizer:(NSSpeechSynthesizer *)sender didFinishSpeaking:(BOOL)complete{ NSLog(@"complete = %d", complete); [startButton setEnabled:YES]; [stopButton setEnabled:NO]; } - (void)speechSynthesizer:(NSSpeechSynthesizer *)sender willSpeakPhoneme:(short)phonemeOpcode{ [startButton setEnabled:NO]; [stopButton setEnabled:YES]; } @end
转载请注明:于哲的博客 » Cocoa学习笔记(2):delegate