• respondsToSelector的相关使用



      • -(BOOL) isKindOfClass: classObj 用来判断是否是某个类或其子类的实例
      • -(BOOL) isMemberOfClass: classObj 用来判断是否是某个类的实例
      • -(BOOL) respondsToSelector: selector 用来判断是否有以某个名字命名的方法(被封装在一个selector的对象里传递)
      • +(BOOL) instancesRespondToSelector: selector 用来判断实例是否有以某个名字命名的方法. 和上面一个不同之处在于, 前面这个方法可以用在实例和类上,而此方法只能用在类上.
      • -(id) performSelector: selector

        SEL sel = @selector (start:) ; // 指定action  

        if ([obj respondsToSelector:sel]) 

        { //判断该对象是否有相应的方法  

        [obj performSelector:sel withObject:self]; //调用选择器方法  

        使用[[UIApplication sharedApplication] keyWindow]查找应用程序的主窗口对象

        respondsToSelector判断是否实现了某方法

        Tester.h

        复制代码
        #import <Foundation/Foundation.h>


        @interface Tester : NSObject {

        }

        -(void) test:(NSString*) msg;

        -(void) notImp;

        @end
        复制代码
        Tester.m
        复制代码
        #import "Tester.h"

        @implementation Tester

        -(void) test:(NSString*) msg
        {
        NSLog(@"%@", msg);
        }

        @end
        复制代码
        注意:没有实现notImp方法

        main.m

        复制代码
        #import <Foundation/Foundation.h>
        #import "Tester.h"

        int main (int argc, const char * argv[])
        {

        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

        id tester = [[Tester alloc] init];//注意,这里使用id

        SEL testSelector = @selector(test:);
        SEL notImpSelector = @selector(notImp:);

        if([tester respondsToSelector:testSelector])
        {
        //tester.m中实现了test方法
        [tester test:@"invoke test method"];
        }
        if([tester respondsToSelector:notImpSelector])
        {
        //test.m中没有实现此主就去
        [tester notImp];
        }


        [pool drain];
        return 0;
        }
        复制代码
         
         
         
         
        1. #import <UIKit/UIKit.h>  
        2.    
        3. @interface ViewController : UIViewController{  
        4.     UIButton *btn1;  
        5.     UIButton *btn2;  
        6.      
        7.     UILabel *label1;  
        8. }  
        9.    
        10. -(void)testRespond1;  
        11. -(void)notTest;  
        12.    
        13. @end  
        14.    
        15.    
        16. #import "ViewController.h"  
        17.    
        18. @implementation ViewController  
        19.    
        20. - (void)didReceiveMemoryWarning  
        21. {  
        22.     [super didReceiveMemoryWarning];  
        23.     // Release any cached data,images, etc that aren't in use.  
        24. }  
        25.    
        26. #pragma mark - View lifecycle  
        27.    
        28. - (void)viewDidLoad  
        29. {  
        30.     [super viewDidLoad];  
        31.          // Do any additional setupafter loading the view, typically from a nib.  
        32.      
        33.     btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];  
        34.     btn1.frame = CGRectMake(50, 100, 100, 50);  
        35.     [btn1 setTitle:@"BTN1" forState:UIControlStateNormal];  
        36.     [btn1 addTarget:self action:@selector(btn1Clicked:) forControlEvents:UIControlEventTouchUpInside];  
        37.     [self.view addSubview:btn1];  
        38.      
        39.     btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];  
        40.     btn2.frame = CGRectMake(200, 100, 100, 50);  
        41.     [btn2 setTitle:@"BTN2" forState:UIControlStateNormal];  
        42.     [btn2 addTarget:self action:@selector(btn2Clicked:) forControlEvents:UIControlEventTouchUpInside];  
        43.     [self.view addSubview:btn2];  
        44. }  
        45.    
        46. -(void)btn1Clicked:(id)sender  
        47. {  
        48.     if ([self respondsToSelector:@selector(testRespond1)])  
        49.     {  
        50.        [self testRespond1];  
        51.     }  
        52. }  
        53.    
        54. -(void)btn2Clicked:(id)sender  
        55. {  
        56.     if (![self respondsToSelector:@selector(notTest)])  
        57.     {  
        58.        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"notTest 没有被实现" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];  
        59.         [alert show];  
        60.         [alert release];  
        61.     }  
        62. }  
        63.    
        64. -(void)testRespond1  
        65. {  
        66.     label1 = [[UILabel alloc] initWithFrame:CGRectMake(50, 200, 220, 200)];  
        67.     label1.text = @"testRespond1 被实现了";  
        68.     [self.view addSubview:label1];  
        69.     [label1 release];  
        70. }  
        71.    
        72. - (void)viewDidUnload  
        73. {  
        74.     [super viewDidUnload];  
        75.     //Release any retained subviews of the main view.  
        76.     // e.g.self.myOutlet = nil;  
        77. }  
        78.    
        79. -(void)dealloc  
        80. {  
        81.     [super dealloc];  
        82. }  
        83.    
        84. @end  
  • 相关阅读:
    安卓Android基础—第一天
    android打电话方法(直接拨通)
    android打电话简单功能(完整代码)
    android最最基础简单的保存xml代码
    Android广播接收者笔记
    记录点点滴滴
    改变对话框和控件的背景及文本颜色
    对话框捕获WM_KEYDOWN消息
    对话框捕获鼠标移动消息,实现“逃跑按钮”
    注意!!!对话框的默认按钮、输入焦点传递
  • 原文地址:https://www.cnblogs.com/lvyinbentengzhe/p/4154028.html
Copyright © 2020-2023  润新知