2012-02-20 17 views
0

我正在嘗試使用一個在OS X應用程序中重寫NSFormatter的類。我從一本書中嘗試了一個例子,但它來自舊版本的XCode。我的問題是我不知道如何設置我的NSTextfield的格式化程序。我不確定現在Xcoded是否內置了IB,或者我做了其他問題。它看起來像你曾經能夠控制點擊你的文本字段,它會帶來一個菜單。在菜單的插座部分,它表示我想看到一個「格式化程序」選擇。這不在菜單的我的網點部分列出。在XCode 4中爲Textfield定製NSFormatter

我不認爲這有什麼不同,但我的NSTextfield是在NSScrollview。我對Cocoa仍然很陌生(來自C#和C++背景)。

+0

你試圖限制NSFormatter在你的NSTextField中? – 2012-02-20 11:29:25

+0

我只是想限制可輸入的字符數 – JonF 2012-02-20 15:12:59

回答

1

你可以簡單地繼承NSNumberFormatter這樣的:

.H

@interface NumberFormatterSubclass : NSNumberFormatter { 

} 

@end 

.M

@implementation NumberFormatterSubclass 


- (BOOL)isPartialStringValid:(NSString **)partialString 
    proposedSelectedRange:(NSRangePointer)proposedSelRange 
      originalString:(NSString *)origString 
    originalSelectedRange:(NSRange)origSelRange 
     errorDescription:(NSString **)error 
{ 

    if ([*partialString length] > 4) { 
     return NO; 
    } 


    return YES; 
} 

不要忘記添加NSNumberFormatter您的NSTextField和更改NSNumberFormatter類到您創建的子類身份檢查員

+0

感謝您的建議,但文本字段不限於數字。我發現這個解決方案創建一個格式化類http://stackoverflow.com/questions/827014/how-to-limit-nstextfield-text-length-and-keep-it-always-upper-case。我只是無法找到如何將nstextfield鏈接到任何格式化器 – JonF 2012-02-20 20:41:50

+0

它不是限制數字。它限制字母和數字。它限制爲4個符號字母或數字。你可以通過在NST​​extField上拖動格式化程序來鏈接格式化程序,然後將格式化程序類更改爲你在身份檢查程序中創建的子類,這在我的post post earlear中是如何說的。此外,如果你不喜歡它的聲音「NSNumberFormatter」使用「NSFormatter」,我的writed代碼將起作用! – 2012-02-20 22:01:00

+1

當爲NSFormatter創建子類時,還必須實現以下方法:stringForObjectValue:和getObjectValue:forString:errorDescription:請參閱「創建自定義格式器」https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting /Articles/CreatingACustomFormatter.html#//apple_ref/doc/uid/20000196 – ctpenrose 2012-04-26 18:10:33