小编Elb*_*mio的帖子

Cocoa:NSView动画

这很简单,所以我不能为我的生活找到什么是错的,我通过文档作为指导,但它仍然无法正常工作.我在一个更大的视图中有一个视图.IBAction应该淡出内部视图......就是这样.这是我得到的:

NSViewAnimation *theAnim;
NSMutableDictionary *viewDict;

// Create the attributes dictionary for the view.
viewDict = [NSMutableDictionary dictionaryWithCapacity:2];

// Set the target object to be the view.
[viewDict setObject:_innerView forKey:NSViewAnimationTargetKey];

// Set this view to fade out
[viewDict setObject:NSViewAnimationFadeOutEffect forKey:NSViewAnimationEffectKey];

theAnim = [[NSViewAnimation alloc] initWithViewAnimations:@[viewDict]];

// Set some additional attributes for the animation.
[theAnim setDuration:1.0];

// Run the animation.
[theAnim startAnimation];
Run Code Online (Sandbox Code Playgroud)

我用NSLogs检查了viewDict和theAnim,两者都没有.我几乎从我工作过的旧程序中复制了这个,现在找不到什么问题.

我正在使用xcode 5.1.1,感谢您的帮助.

cocoa fade nsviewanimation

27
推荐指数
2
解决办法
1万
查看次数

Cocoa:如何独立地多次使用NSNib

我已经问过如何让自定义视图重复自己分成几个单独的副本,并告诉我应该使用NSNib或NSViewController.我在nib文件中有一个自定义视图,每当用户单击一个按钮时,我想要显示一个的nib视图副本,同时仍然在屏幕上的其他位置维护前一个,同时运行多达十个单独的视图.由于这些中的每一个在出现之前都需要一些用户输入,我认为它们必须是每个单独的对象或某些东西,以使它们不同并且不会相互干扰.

我可以使用第一个视图

NSNib *nib = [[NSNib alloc] initWithNibNamed:@"IndividualTimers" bundle:nil];

[nib instantiateNibWithOwner:self topLevelObjects:nil];
Run Code Online (Sandbox Code Playgroud)

但是,每次按下按钮时,只会重新启动相同的视图,我可以看出两个视图已合并到该视图中,因为显示在其上的计时器开始滴答速度的两倍,但它们应该在两个不同的实例中独立显示的观点.

有人告诉我应该使用设置不同文件的所有者.

到目前为止,人们一直很有帮助,但不是很具体.我不知道我应该设置什么文件的所有者,如何以编程方式创建一个新对象来保存加载的笔尖的每个实例(如果这甚至是如何完成),或者我是否需要为每个加载单独的对象.

基本上,我想知道如何获取一个nib文件,并将其用作模板,最多可以加载十次,而每个(最多)十个视图同时运行,但是独立运行.

我非常感谢您提供的任何具体帮助,因为这是我在Xcode编程时遇到的最大问题.我被困了几个星期.谢谢你的帮助.

cocoa view objective-c nib viewcontroller

6
推荐指数
1
解决办法
1798
查看次数

从计时器停止NSRunLoop

我已经制作了一个带有计时器的RunLoop,它可以更新显示倒计时的标签.倒计时到零时我需要RunLoop停止,对于计时器正常结束的情况,我可以使用runUntilDate,日期是当前日期+倒计时时间.问题是当用户在按钮完成之前取消倒计时.我不知道如何告诉RunLoop停止取消按钮操作.这是RunLoop的代码:

    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
                            [self methodSignatureForSelector:@selector(updateCountdownLabel:)]];
[invocation setTarget:self];
[invocation setSelector:@selector(updateCountdownLabel:)];
[[NSRunLoop mainRunLoop] addTimer:[NSTimer timerWithTimeInterval:1 invocation:invocation repeats:YES] forMode:NSRunLoopCommonModes];
Run Code Online (Sandbox Code Playgroud)

该方法只是告诉标签在每个循环中减少1.

我可以告诉取消按钮将标签更改为零,并让运行循环选择器检查值是否为零,但RunLoop自己的选择器是否可以告诉它停止?

cancelPerformSelector:target:argument:

cancelPerformSelectorsWithTarget:
Run Code Online (Sandbox Code Playgroud)

这些是我发现的最接近但它们似乎不是从RunLoops自己的选择器内部工作,或者至少不是我尝试过它们的任何方式.

基本上我需要让按钮告诉RunLoop停止,或以某种方式阻止RunLoop从它自己的选择器.

谢谢.

cocoa timer nstimer nsrunloop runloop

4
推荐指数
1
解决办法
1万
查看次数

选择按下选项卡时文本字段循环的顺序

我有几个文本字段,并希望设置一个特定的顺序,当按下Tab键时它们将循环.目前,它从文本字段开始,becomeFirstResponder然后以xcode放置的默认顺序继续.我可以以某种方式绕过该顺序并强制文本字段按特定顺序循环吗?就像将循环的最后一个链接回第一个循环一样.

谢谢您的帮助.

cocoa textfield

4
推荐指数
1
解决办法
1792
查看次数

Cocoa:在app最前面强制NSUserNotification

相当简单,我有一个应该发送通知的应用程序,但如果应用程序是最前面的,它将不会这样做.从NSUserNotificationCenter类参考:

用户通知中心保留决定是否向用户呈现所传递的用户通知的权利.例如,如果应用程序已经位于最前面(委托可以覆盖此操作),它可能会禁止通知.

从我可以收集的内容来看,它与userNotificationCenter:shouldPresentNotification:NSUserNotificationCenterDelegate协议参考中显示的方法有关,但我无法弄清楚如何实现它.我已经将我的课程设置为NSUserNotificationCenterDelegate,所以不是这样.

有任何想法吗?

编辑:在我设置为NSUserNotificationCenterDelegate的类中,我使用它来尝试覆盖原始方法,如果应用程序位于最前面,则默认为NO:

- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification {
return YES;
}
Run Code Online (Sandbox Code Playgroud)

但没有任何反应.

cocoa delegates nsusernotification

4
推荐指数
1
解决办法
1686
查看次数

Cocoa textfield返回null

对不起,如果它有点长,但我希望尽可能具有描述性.我正在制作一个带有几个类和两个nib文件的测试应用程序(每个类都是一个nib的所有者).其中一个nib文件有一个文本字段,另一个有一个按钮.当按下另一个笔尖视图中的按钮时,我正在尝试记录文本字段内的任何内容,但它返回(null).在其中一个类(ViewClass)中,我有这个:

- (IBAction)startAction:(id)sender {
MyClass *anInstance = [[MyClass alloc] init];
NSString *string= [anInstance name];
NSLog(@"startAction logged: %@", string);
Run Code Online (Sandbox Code Playgroud)

"名称"是MyClass的属性.我想要做的是在MyClass的init中设置"name",这样,当anInstance初始化时,MyClass init方法执行此操作:

- (id)init {
if ( self = [super init] )   {
    [self setName:[nameInput stringValue]];
    NSLog(@"init value: %@", name);
}
return self;
Run Code Online (Sandbox Code Playgroud)

"NameInput"是文本字段.我认为这将返回文本字段中的任何内容,但我得到null.当我使用setName:@"text"它时,传递得很好,因此文本字段出了问题.

我之前用自己的getter做过这个,在那种情况下,当从它自己的类调用该方法时它没有返回null,但是如果它是从其他类初始化并调用的,那么它返回null,我用了这个:

- (NSString *)name {
NSLog(@"nameMethod = %@", [nameInput stringValue]);
return [[[nameInput stringValue] retain] autorelease];
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我可以说它已经完全正确设置了,但是当我从ViewClass初始化MyClass并尝试获取"名称"时会发生一些事情,它一直说文本字段为空.

不确定它是否有帮助,但带按钮的笔尖属于MyView(它是NSViewController的子类),textfield属于MyClass(NSObject的子类).

有人建议该字段没有正确链接,但如果这是真的,那么从它自己的类调用它时就不会有效,但确实如此.有人提到它可能是一个问题,文本字段被初始化为nil,所以我尝试了上面的init事件.到目前为止,两者都没有奏效.

谢谢您的帮助.

methods cocoa class objective-c textfield

0
推荐指数
1
解决办法
473
查看次数