0

如果我有一个方法叫做

-(void) changeButton:(UIButton *)button andAlpha:(float)alpha andEnabled:(BOOL)enabled {
    button.alpha = alpha;
    button.enabled = enabled;    
}

无论如何我只能调用[self changeButton:buttonName andAlpha:0.5];并错过andEnabled(BOOL)启用,以便它保持相同的值。

4

3 回答 3

2

不,仅当您声明其他方法时。

-(void) changeButton:(UIButton *)button andAlpha:(float)alpha {
    [self changeButton:button andAlpha:alpha andEnabled:button.enabled]; 
}

-(void) changeButton:(UIButton *)button andAlpha:(float)alpha andEnabled:(BOOL)enabled {
    button.alpha = alpha;
    button.enabled = enabled;    
}

但请记住,这种方法并不总是好的。例如,启用的属性可以由一些自定义设置器备份,即使您不想更改该值,也会调用该设置器。

于 2012-11-21T10:48:54.110 回答
0

你不能这样做,你必须声明另一个方法。

-(void) changeButton:(UIButton *)button andAlpha:(float)alpha;
于 2012-11-21T10:54:10.427 回答
0

我确定您在询问 c++ 的默认参数化函数。

但是 Objective-C 不支持这一点。

您可以创建 2 种方法:

-(void) changeButton:(UIButton *)button andAlpha:(float)alpha {
    button.alpha = alpha; 
}

-(void) changeButton:(UIButton *)button andAlpha:(float)alpha andEnabled:(BOOL)enabled {
    button.alpha = alpha;
    button.enabled = enabled;    
}

对于 C :使用 ObjC 对 C 子集没有什么特别的添加。在纯 C 中无法完成的任何事情也无法通过在 ObjC 中编译来完成。这意味着,您不能有默认参数,也不能重载函数。改为创建 2 个函数。

另一种方法(有点冗长,因为很少有人使用)是有一个标志并检查标志是/否。

 -(void) changeButton:(UIButton *)button andAlpha:(float)alpha andEnabled:(BOOL)enabled withFlag:(BOOL)flag{
    button.alpha = alpha;
    if(flag){        
        button.enabled = enabled;    
    }
}
于 2012-11-21T11:30:20.710 回答