Questions tagged «selector»

选择器可以是用Objective-C或Smalltalk编程语言标识方法名称的字符串,也可以是计算机中用于将多条线路(I / O)连接到一条线路的特殊类型的开关。请不要将此标签用于jQuery / CSS选择器。

23
Swift中的@selector()?
我正在尝试创建一个NSTimerin,Swift但是遇到了一些麻烦。 NSTimer(timeInterval: 1, target: self, selector: test(), userInfo: nil, repeats: true) test() 是同一个类中的函数。 我在编辑器中收到一个错误: 找不到接受提供的参数的'init'的重载 当我更改selector: test()为selector: nil错误时消失。 我试过了: selector: test() selector: test selector: Selector(test()) 但是没有任何效果,我在参考文献中找不到解决方案。
659 swift  selector  nstimer 

16
Swift等效于reactsToSelector是什么?
我已经用谷歌搜索,但无法找出什么是等效respondsToSelector:的。 这是我唯一能找到的东西(Swifts替代responsToSelector:),但在我的案例中并不太相关,因为它检查委托的存在,我没有委托,我只想检查是否存在新的API在设备上运行时是否返回,如果不是,则返回原先的api版本。

12
如何摆脱“未声明选择器”警告
我想在NSObject实例上使用选择器,而不需要已实现的协议。例如,如果要调用的NSObject实例支持它,则有一个category方法应该设置一个error属性。这是代码,并且代码按预期工作: if ([self respondsToSelector:@selector(setError:)]) { [self performSelector:@selector(setError:) withObject:[NSError errorWithDomain:@"SomeDomain" code:1 userInfo:nil]]; } 但是,编译器看不到带有setError:签名的任何方法,因此对于包含该@selector(setError:)代码段的每一行,它都会向我发出警告: Undeclared selector 'setError:' 我不想声明一个协议来摆脱此警告,因为我不希望所有可能使用此协议的类实现任何特殊的东西。按照约定,我希望它们具有setError:方法或属性。 这可行吗?怎么样? EP,干杯

30
Objective-C中的“无法识别的选择器发送到实例”错误
我创建了一个按钮并为其添加了一个动作,但是一旦调用它,我就会收到此错误: -[NSCFDictionary numberButtonClick:]: unrecognized selector sent to instance 0x3d03ac0 2010-03-16 22:23:58.811 Money[8056:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:'*** -[NSCFDictionary numberButtonClick:]: unrecognized selector sent to instance 0x3d03ac0' 这是我的代码: - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { UIButton *numberButton = [UIButton buttonWithType:UIButtonTypeCustom]; numberButton.frame = …

7
Objective-C:调用具有多个参数的选择器
在MyClass.m中,我定义了 - (void) myTest: (NSString *) withAString{ NSLog(@"hi, %@", withAString); } 以及MyClass.h中的适当声明。以后我想打电话 [self performSelector:@selector(mytest:withAString:) withObject: mystring]; 在MyClass.m中,但由于未捕获的异常'NSInvalidArgumentException'而收到类似于*终止应用程序的错误 ,原因:'* -[[MyClass myTest:withAtring:]:无法识别的选择器已发送到实例0xe421f0' 我用一个选择器尝试了一个更简单的情况,该选择器不带任何参数,该参数将字符串打印到控制台,并且工作正常。代码有什么问题,我该如何解决?谢谢。

8
Objective-C中的选择器?
首先,我不确定我是否真的了解选择器。据我了解,它是方法的名称,您可以将其分配给类型为'SEL'的类,然后运行诸如responseToSelector之类的方法,以查看接收方是否实现了该方法。有人可以提供更好的解释吗? 其次,到目前为止,我有以下代码: NSString *thing = @"Hello, this is Craig"; SEL sel = @selector(lowercaseString:); NSString *lower = (([thing respondsToSelector:sel]) ? @"YES" : @"NO"); NSLog (@"Responds to lowercaseString: %@", lower); if ([thing respondsToSelector:sel]) //(lower == @"YES") NSLog(@"lowercaseString is: %@", [thing lowercaseString]); 但是,尽管thing显然是一种NSString,并且应该响应lowercaseString,但我无法获得“ respondsToSelector”条件来返回“ YES” ...


4
取消排队的performSelector:afterDelay调用
有没有人知道在调用时是否可以从事件堆栈或计时器堆栈(或API使用的任何机制)中取消已排队的选择器事件performSelector:withObject:afterDelay? 我正在使用此事件堆栈来更改TabBar选项卡中图像的属性,有时在一次快速执行的循环中可能需要排队长达10秒钟的更改,价值可能长达10秒钟……大约5毫秒左右。 如果用户切换选项卡,就会出现问题...就像说我让启用了选项卡#4的图像更改排队等待显示的图像,然后用户迅速切换到选项卡#3,然后又回到选项卡#4 ...这会在旧队列仍在播放时重新排入10秒钟的变更队列,如果切换得足够快的话,可能会排入队列约2或3秒钟...但甚至到达5秒钟流是个问题。 所以我需要一些方法来取消旧的更改堆栈,然后再放上新的堆栈... 我用过去时来编写此查询,因为我已经通过在播放功能上添加鹰眼事件过滤器来解决此问题,并提出了另一种解决方案。但是我仍然对是否可以取消事件感到好奇,因为我感觉这种知识将来会派上用场。感谢您提供的任何帮助:)

6
android按钮选择器
这是一个按钮选择器,正常时显示为红色,按下时显示为灰色。 我想问一下如何对代码进行进一步的直接修改,以便在按下时可以更改文本的大小和颜色?非常感谢! <item android:state_pressed="true" > <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="2dp" android:color="@color/black" /> <solid android:color="@color/grey"/> <padding android:left="5dp" android:top="2dp" android:right="5dp" android:bottom="2dp" /> <corners android:radius="5dp" /> </shape> </item> <item> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="2dp" android:color="@color/black" /> <solid android:color="#FF6699"/> <padding android:left="5dp" android:top="2dp" android:right="5dp" android:bottom="2dp" /> <corners android:radius="5dp" /> </shape> </item>
115 android  selector 

5
Android:选择器中禁用按钮的textColor没有显示?
我试图用选择器制作一个按钮,我的按钮可以具有以下状态: 启用/禁用 按下/未按下 根据上述状态。我需要操纵按钮的: 文字颜色 背景图像 该按钮从被禁用开始,因此应该具有禁用的textColor和禁用的按钮背景。但是我可以看到默认的textColor(以样式指定)并且没有背景图片! 这是我的选择器button_selector.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false" android:state_enabled="false" android:textColor="#9D9FA2" android:drawable="@drawable/button" /> <item android:state_pressed="true" android:state_enabled="true" android:drawable="@drawable/button_pressed"/> <item android:state_pressed="true" android:state_enabled="false" android:textColor="#9D9FA2" android:drawable="@drawable/button"/> <item android:state_pressed="false" android:state_enabled="true" android:drawable="@drawable/button"/> </selector> 这是我的layout.xml中的按钮声明 <Button android:id="@+id/reserve_button" android:text="@string/reserve_button" android:layout_width="120dp" android:layout_height="40dp" android:layout_marginTop="10dp" android:layout_marginLeft="20dp" android:paddingRight="15dp" android:layout_gravity="left" style="@style/buttonStyle" android:background="@drawable/button_selector" /> 最后这就是我的风格(设置了我的默认textColor) <?xml version="1.0" encoding="utf-8"?> …

4
为什么Objective-C方法名称的最后一部分必须带一个参数(当有多个部分时)?
在Objective-C中,您不能在最后一个组件不带参数的地方声明方法名称。例如,以下内容是非法的。 -(void)take:(id)theMoney andRun; -(void)take:(id)yourMedicine andDontComplain; 为什么用Objective-C这样设计?仅仅是Smalltalk的产物,没有人看到有需要摆脱的必要吗? 此限制在Smalltalk中是有意义的,因为Smalltalk在消息调用周围没有定界符,因此最终组件将被解释为最后一个参数的一元消息。例如,BillyAndBobby take:'$100' andRun将解析为BillyAndBobby take:('$100' andRun)。在Objective-C中,这不需要括号,这无关紧要。 支持无参数选择器组件不会像用程序员选择的方法名称(例如,runWith:而不是语言)那样以所有常用的语言度量方法给我们带来很多好处。take:andRun)不会影响程序的功能语义,也不会影响语言的表现力。确实,具有无参数组件的程序与没有该组件的程序等效。因此,我对不需要此功能的答案不感兴趣(除非这是Objective-C设计师的陈述原因;是否有人偶然知道Brad Cox或Tom Love?他们在这里吗?)或那句话如何编写方法名称,以便不需要该功能。主要的好处是可读性和可写性(这与可读性一样,只是...您知道),因为这意味着您可以编写与自然语言句子更加相似的方法名称。这样的人-(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication*)theApplication(马特·加拉格尔指出的“可可的爱”-(BOOL)application:(NSApplication*)theApplication shouldTerminateAfterLastWindowClosed,因此将参数直接放在适当名词的旁边。 苹果的Objective-C运行时(例如)完全能够处理这类选择器,那么为什么不编译呢?为什么不同时在方法名称中支持它们呢? #import <Foundation/Foundation.h> #import <objc/runtime.h> @interface Potrzebie : NSObject -(void)take:(id)thing; @end @implementation Potrzebie +(void)initialize { SEL take_andRun = NSSelectorFromString(@"take:andRun"); IMP take_ = class_getMethodImplementation(self, @selector(take:)); if (take_) { if (NO == class_addMethod(self, take_andRun, take_, "@@:@")) { …

10
iOS-如何使用多个参数和afterDelay实现performSelector?
我是iOS新手。我有一个选择器方法如下- - (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second { } 我正在尝试实现这样的东西- [self performSelector:@selector(fooFirstInput:secondInput:) withObject:@"first" withObject:@"second" afterDelay:15.0]; 但这给了我一个错误的说法- Instance method -performSelector:withObject:withObject:afterDelay: not found 关于我所缺少的任何想法吗?

6
什么时候在Swift中使用@objc?
在Swift中,我看到一些类似的方法: @objc private func doubleTapGestureRecognized(recognizer: UITapGestureRecognizer) 我想知道何时使用@objc?我读了一些文档,但他们说要在Objective-C中调用它时,应添加@objc标志 但是,这是Swift中的私有函数,@ obj的作用是什么?

9
如何同时为Button应用形状和选择器?
我已经为按钮应用了形状,例如: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <gradient android:startColor="#DD000000" android:endColor="#DD2d2d2d" android:angle="90"></gradient> <corners android:radius="15dip"></corners> </shape> 现在我想使用一个选择器,例如: <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/active" android:state_pressed="true" /> <item android:drawable="@drawable/passive"/> 对于此按钮也是如此。可能吗 ...???

6
如何创建“选择器数组”
我正在使用iPhone SDK(3.0),并且试图创建一个选择器数组来在一个类中调用各种方法。 显然,我做错了(我认为@selector不被认为是一个类,因此将它们填充到NSArray中是行不通的)。 我试过了,但这显然是错误的。 是否有一种简单的方法来拥有这样的选择器数组?还是有更好的方法来遍历一组方法? selectors = [NSArray arrayWithObjects: @selector(method1), @selector(method2), @selector(method3), @selector(method4), @selector(method5), @selector(method6), @selector(method7), nil]; for (int i = 0; i < [selectors count]; i++) { if ([self performSelector:[selectors objectAtIndex:i]]) // do stuff; }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.