【问题标题】:Sending extra parameters in UIButton instance在 UIButton 实例中发送额外参数
【发布时间】:2012-05-18 13:09:15
【问题描述】:

当我实例化这个按钮类时是否可以发送额外参数,像这样:?

BttClass *myButton = [[BttClass alloc] init];

如果是这样,正确的语法是什么?我一直在尝试各种! 我想发送一个 BOOL 和一个字符串。 谢谢。

【问题讨论】:

  • 我的第一个问题是为什么?如果您遵循MVC 原则,则无需添加任何额外信息即可查看,这些信息应包含在您的模型中。只是我对这个问题的想法。
  • 也许按钮需要(好吧也许不需要,但'想要')足够聪明来改变它的标题,它使用这些参数来做到这一点?
  • 达摩是对的,我正在做一个自定义按钮。由于设计原因,常规的自定义选项不起作用。 (诚​​然,也许 UIButton 对我来说不是正确的选择。也许我应该使用 UIControl 或其他东西。)

标签: iphone ios ios5 uikit


【解决方案1】:

通过继承 UIButton 来扩展它。

//MyButton.h
@interface MyButton : UIButton {

}

@property (nonatomic, strong) NSString* aString;
@property (nonatomic, weak) BOOL aBool;

你需要定义一个初始化方法

-(id)initWithStringValue:(NSString *)stringValue andWithBoolValue:(bool)boolValue;

然后实现初始化方法

//MyButton.m
-(id)initWithStringValue:(NSString *)stringValue andWithBoolValue:(bool)boolValue {
    self = [super init];
    if (self) {
        self.aString = stringValue;
        self.aBool = boolValue;
    }
    return self;
}

在调用类中,您的代码如下所示

MyButton* myButton = [[MyButton alloc] initWithStringValue:@"tralala" andWithBoolValue:YES];

【讨论】:

  • 如果它有帮助,那么标记/接受答案总是很感激;-)
【解决方案2】:

只需定义一个自定义初始化程序并传入您的值:

- (id)initWithBoolValue:(bool)boolValue stringValue:(NSString *)stringValue  {
    self = [super init];
    if (self) {
        // Custom initialization
    }
    return self;
}

【讨论】:

  • 谢谢梅尔萨姆。不过,也需要知道如何称呼它。 (下面由 Damo 回答。)
【解决方案3】:

创建您的自定义按钮

在你的

自定义按钮.h

@interface CustomButton : UIButton

    - (id)initWithBooleanValue:(BOOL)value;

@end

在你的 自定义按钮.m

- (id)initWithBooleanValue:(BOOL)value
{
    self = [super init];
    if (self)
    {
        NSLog(@"Bool = %d",value);
    }
    return self;
}

你可以使用这个类来代替你的普通 UIButton

【讨论】:

  • 感谢 Aatish。不过,也需要知道如何称呼它。 (达摩回答。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2021-09-17
  • 2014-07-10
相关资源
最近更新 更多