第19~20章 Keyboard Events & Drawing Text with Attributes
    
    这两章完成了一个功能,响应用户的键盘输入,并把用户输入的字母显示到view中。
    
    第19章主要介绍view如何响应用户的键盘输入。第20章介绍如何将,从键盘得到的字母以特殊的格式显示到view上。
    
    1.一个应用程序可能有多个view。那么,到底哪个view来响应键盘的输入呢?
    
    只有keyView的firstResponder才会响应。但是keyView和first Responsder是可以在view之间切换的。切换的过程如下图所示。
    
    可以通过在nib中设置nextKeyView来完成keyView的切换。
    
    
     
    
   
    2.对键盘事件的响应通过keyDown等函数来处理,例如:
    
    
     
     - (void)keyDown: (NSEvent *)event
     
     {
     
     
     [self interpretKeyEvents:[NSArray arrayWithObject:event]];
     
     }
     
     Then you need to override the methods that interpretKeyEvents: will call:
     
     - (void)insertText: (NSString *)input
     
     {
     
     
     // Set string to be what the user typed
     
     [self setString:input];
     
     }
     
    
    
    3. 设置格式属性
    
    
     
     - (void)prepareAttributes
     
     {
     
     
     attributes = [[NSMutableDictionary alloc] init];
     
     [attributes setObject:[NSFont fontWithName:@"Helvetica" size:75]
     
     forKey:NSFontAttributeName];
     
     [attributes setObject:[NSColor redColor] forKey:NSForegroundColorAttributeName];
     
     }
     
    
    4. 将string在view上的以某种格式显示出来
    
    例如,在rect居中显示
    
    
     
     - (void)drawStringCenteredIn: (NSRect)r
     
     {
     
     
     NSSize strSize = [string sizeWithAttributes:attributes];
     
     NSPoint strOrigin;
     
     strOrigin.x = r.origin.x + (r.size.width - strSize.width)/2;
     
     strOrigin.y = r.origin.y + (r.size.height - strSize.height)/2;
     
     [string drawAtPoint:strOrigin withAttributes:attributes];
     
     }
     
    
    
    challenge1:在attribute中加入阴影属性。
    
    challenge2: 使用NSFontManager将NSFont转换成“BOLD”格式后,加入attribute中。
   
    
    
   
另外还介绍了如何产生PDF数据,没有细看。
 
