我需要得到一个字符串像en_US或es_ESiOS中.
显而易见的方法是使用[NSLocale currentLocale]并从那里获取语言信息.但是,这会为您提供"区域格式"而不是实际的设备语言,这意味着如果您使用英语设备语言但区域格式为"西班牙",则会错误地报告es_ES.
如果您需要设备语言,则必须执行以下操作:
[[NSLocale preferredLanguages] objectAtIndex:0]
但是,这只会为您提供语言,因此您可以获得类似en或es最终没有国家/地区代码的内容.
我如何正确获取国家代码,就像Safari一样?
尝试更改NSTextField的选定文本背景颜色(我们有一个黑暗的UI,选定的文本背景几乎与文本本身相同),但只有NSTextView似乎允许我们更改它.
因此我们尝试使用NSTextView伪造NSTextField,但无法使文本滚动工作相同.
我们得到的最接近的是这段代码:
NSTextView *tf = [ [ NSTextView alloc ] initWithFrame: NSMakeRect( 30.0, 20.0, 80.0, 22.0 ) ];
// Dark UI
[tf setTextColor:[NSColor whiteColor]];
[tf setBackgroundColor:[NSColor darkGrayColor]];
// Fixed size
[tf setVerticallyResizable:FALSE];
[tf setHorizontallyResizable:FALSE];
[tf setAlignment:NSRightTextAlignment]; // Make it right-aligned (yup, we need this too)
[[tf textContainer] setContainerSize:NSMakeSize(2000, 20)]; // Try to Avoid line wrapping with this ugly hack
[tf setFieldEditor:TRUE]; // Make Return key accept the textfield
// Set text properties
NSMutableDictionary *dict = [[[tf selectedTextAttributes] mutableCopy ] …Run Code Online (Sandbox Code Playgroud) 在GCC 4.6中尝试了它并编译和链接,但在MacOS上运行时发出"总线错误"消息.VS2010甚至没有编译它.
但问题是,这应该在标准C++ 0x中实际工作吗?
#include <cstdio>
int (*main)()=[]()->int{printf("HEY!\n");return 0;};
Run Code Online (Sandbox Code Playgroud)
是的,它试图将"main"定义为lambda函数.
当按下Tab键使NSTextField失去焦点时,我似乎找不到通知的方法.单击另一个控件或按Enter键时,我得到一个很好的textDidEndEditing,但是如果我通过按Tab键更改焦点则不会.
还试图为此目的猛拉KeyDown和doCommandBySelector,但我无处可去.
有任何想法吗?
提前致谢
编辑:
忘了提,但我也试过resignFirstResponder.这是我试过的代码:
- (BOOL)resignFirstResponder
{
NSRunAlertPanel(@"", @"Lost Focus",@"OK", nil, nil);
return [super resignFirstResponder];
}
- (BOOL)becomeFirstResponder
{
NSRunAlertPanel(@"", @"Got focus",@"OK", nil, nil);
return [super becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这里发生的事情是,当获得焦点时,一个接一个地调用becomeFirstResponder和resignFirstResponder.但是当将焦点从控制转移时,两者都没有.
好吧,我被告知这个问题:为什么你可以抛出指向派生类的指针并捕获指向其基础的指针......但你不能用shared_ptrs做到这一点?
例如,这有效:
class Base {};
class Derived : public Base {};
int main()
{
try
{
throw new Derived() ;
}
catch( const Base2 * b )
{
printf("Received a base" ) ;
}
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
但事实并非如此
int main()
{
try
{
throw std::tr1::shared_ptr<Derived>( new Derived() ) ;
}
catch( const std::tr1::shared_ptr<Base> & b )
{
printf("Received a base" ) ;
}
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
c++ ×2
cocoa ×2
nstextfield ×2
c++11 ×1
exception ×1
focus ×1
ios ×1
lambda ×1
macos ×1
nstextview ×1
objective-c ×1
shared-ptr ×1