根据之前的代码,做了调整。把所有控件的初始化放在ViewController.cs文件中,把所有delegate和逻辑代码单独放一个cs文件中。
新增NSTableView,暂时不通过xcode delegate对应的类。直接手动实现。
NSTableViewDataSource子类(主要负责更新表格数据):
如果不想让TableView显示全名称,代码如下。C#把NSVoiceName这个enum类型改成了对应的string,可以遍历dict的key得到对应的属性名。
var dict = NSSpeechSynthesizer.AttributesForVoice(NSSpeechSynthesizer.AvailableVoices[row]); return dict.ObjectForKey(NSObject.FromObject("VoiceName"));
NSTableViewDelegate子类(主要负责Event的处理),需要注意SetVoice在Cocoa中是protected成员函数,所以采用强行调用的方法:
NSSpeechSynthesizerDelegate子类(和之前的代码一样,没有做修改):
然后就是ViewController.cs中的初始化
附上Xcode布局调整
最后上测试图。