将任意控制,功能

问题描述:

的说法我想打一个共同的功能,这需要一个控制作为参数(如的UITextField,UIButton的等)将任意控制,功能

其工作的罚款,如果我不喜欢这个

- (void) myFunction : (UITextField*) : control 
{ 

} 

//But I want to make it common for any control 

- (void) myFunction : (`I don't know what to write here`) : control 
{ 
    //suppose if control is UITextField, I can set its font and its size. 
    //something like this 
    [control setFont:[UIFont fontWithName:@"Verdana" size:12]]; 
} 

这可能吗?

你也可以去这样

- (void) myFunction : (id) control 
{ 
    if([control isKindOfClass:[UITextField class]]){ 
    // Your textfield condition 
    } 
} 

UIControlUITextFieldUIButton和其他控件超类,所以这是你想要什么:

- (void) myFunction:(UIControl *) control 

你应该通过UIControl,因为它是为控制超类。

然后在您的代码中,您应该使用像respondsToSelector:这样的方法来确定传入的控件是否可以执行您需要的操作。

您也可以使用isKindOfClass:isMemberOfClass来检查其类别类型。

一旦你知道哪个对象正在处理,你可以键入它转换,以节省一些打字,并移除任何有关警告不应对选择,像这样:

// decided that it's a UITextField after using `respondsToSelector:` or `isKindOfClass:` 
UITextField *aTextField = (UITextField *)control; 

这种方法被称为“鸭子打字” - 因为它类似于说“如果它像鸭子走路,听起来像鸭子,它可能会成为一只鸭子”。

是的,这是可能的。你可以通过UIView作为参数,如下所示。

- (void) myFunction:(UIView*)customView{ 
    if([customView isKindOfClass:[UIImageView class]]){ 
    // This is UIImageview 
    } 
} 

希望这个帮助。

使用通用的ID,然后投你的控制,并询问是否有一个UITextField(或子类...)

- (void) myFunction : (id) control 
    { 
     //suppose if control is UITextField, I can set its font and its size. 
     //something like this 
     (UITextField*)aText = (UITextField*)control; 
     if ([aText.class isSubclassOfClass:[UITextField class]]) { 
      [aText setFont:[UIFont fontWithName:@"Verdana" size:12]]; 
     } 
    }